Você está na página 1de 304

4£1 * W i

1
VO iR CtVITA

REDAÇÂO

Direlora Editorial: Iara Rodrigues

Editor chefe: F^ulo d« Almeida


Editor de letíoí Cláudio A\ Cavalcanti
Editor de Artf i Eduarda Barreto
Chefe de Arte: Carlos Luiz Batista
AMÚrtentesdeArte: Aillon thvi-ira '
I
iiivaiy M Sanl'*
José Maria dt Oliveira. Grace A. Arruda.
Mímica Lenardon Corradi
Secretária de Rídaçáo Coordenadora: Stefania I u ma
Serrelarirnde Redaçáo: fcatri/ H.igslrum. Jose Kfii>'dit<>
ar ' Hncira Danná". M.in.i rir Luirdes ( arvalho, Marisa

Soam de Andrade. Mauro de Queiroz


Secretario Gráfico: Antoni» Jnsé Filho

COLABORADORES
CnniullorF.ditorialRfipimHirl:!ir K.-naloV F.Sahbalim
I Diretor do Núcleo de Informática Biomédica da
Universidade Estadual At Campinas]
Editorial: DATAyUEST Assessoria orn
a Uda Campinas, SP

Tradução: Maria Fernanda Sabbalini

Adaptação, programação e redsçào: Abília Fedro Neto.


Aluísio 1 [Jornellas de Barros, Marcelo K Pires Thereia
Raul Neder PurreUi
Coordenação geral: Rf \uw Fduatti Sabbatini
Auiilenle de Arte: I ijjimar Bastos Sampaio

COMERCIAL
Diretor Comercial: Roberto Martins Silveira
Gerente Concreta!: Flávio Ferruciu Maculan
Gerente de Circulação: [leniw Maria Mozo]

PRODUÇÃO
Gerente de Produção: loto Stwigis
Coordenador do Impressão: Vili" Huberto Botton
Preparador de Texto / Coordenador: Flit-I Silveira Ctniln
Preparadorwdf Teito: Ana Maria Dilguerian, Antonio
Francelino dn UimM. ferina \|i V ilrntn [jrvun Yaiubian.
Maria Terela Galluai. Paulo Felipe Mendrone.
Revisor .'
Coordenador José Maria de Assis
Rniaorai: 1
: iá" \\um ls,i:n-l Iro iV

Camargo. Ligia Aparecida Ki:eiin. Maria dn armo Ijme l

Waiv.ii. Mari.1 Ijlím vm-Vs Maria Teresa Martins Lopes

Marshall 1'amidisr, Limited. tWt/K


Editora Nova Cultural Lida., Sâo Paula Brasil, I9B6.
Ediçào organizada pela Editora Nova Cultural Ltda
lArtigo 15 da Lei 5 9B8. de 14/12/1973).
Esta obra loi composta na AM Produções Gráficas Ltda e
impressa na Divisão Gráfica da Editora Abril SA.
APLICAÇÓCS
Escreva canas sem esforço 17
Organize as suas coleções (1) 68
Organize as suas coleções (2) 81
Ponha ordem em suas contas 134
Reúna seus ciados em gráficos 181
Um professor de datilografia 253
Datilografia: alfabeto completo 276
Melhore a sua daiilografia 281

Programação em código de máquina 1


Aprenda a contar com um dedo só 34
Aprenda aritmética hexadecimal 56
Como entrar çódigo de máquina 88
No coração de um micro 109
Abaixo de zero 142
Memorias são feitas assim 174
Tradução manual do Assembly 196
Programas em código de máquina 213
Assembler para o Apple 238
Assembler para o Speclrum 248
Assembler para o TRS-Color 296

Números ao acaso 11
A arle de fazer laços 21
Ensine seu micro a tomar decisões 41
As placas de sinalização 76
Programe jogos a cores 86
O que são variáveis 96
Como desenhar em Basic 113
Os comandos READ e DATA 128
Faça programas mais curtos 141
Ordem e limpeza no vídeo 146
E agora... O que fazer? 161
Crie sprttes no MSX 188
Conjuntos: caixas de informação 192
Conjuntos de duas dimensões 201
Como estruturar seus programas 221
Recursos gráficos sofisticados 232
Cadeias de caracteres 241
Código de controle 260
Os comandos PEEK e POKE 261
Mais códigos de controle 269
Ordenação pelo método de bolhas 292

PROGRAMAÇÃO DE JOGOS
Animação e sinais gráficos 4
Apontar... fogo! 28
Divirta-se com labirintos 46
Marque o tempo e os pontos 61
Ataque extraterrestre 101
Bombardeios e explosões 121
Torne o jogo mais difícil 153
Quebre a barreira do som 168
Como planejar uma aventura 208
O mapa da aventura 226
Como movimentar o aventureiro 270
DIGODEMAQ
imiiuii

O QUE E CÓD IGO DE MAQUINA?


VANTAGENS EM RELAÇÃO AO BASIC.
COMO COMPREENDER CÓDIGO DE

Utilizado na programação de jogos,

o código de máquina proporciona


uma ação rápida e contínua.

Antes de empregá-lo, porém, você


deve saber como ele afeta
o desempenho do seu computador.

O BASIC constitui sem dúvida a mais


difundida e popular linguagem de pro-
gramação. Universalmente, conhecido,
de aprender e pode ser adap-
ele é fácil
tado a diferentes máquinas. Seus pro-
gramas, contudo, ocupam grandes espa-
ços de memória e permitem apenas um
movimento de cada vez. Assim, se um
canhão atira, num jogo de guerra, o res-
to da ação lem que esperar, mesmo que
seja por uma fração de segundo.
O BASIC usa palavras da linguagem
humana, tiradas do inglês, e operações
semelhantes às da aritmética, fáceis de
compreender. Mas seu computador não
pensa em inglês nem entende os símbo-
los aritméticos. Ele opera baseado em
impulsos elétricos que representam nú-
meros. E essa conversão é a causa de sua
lentidão ao trabalhar com o BASIC.
Código de máquina é uma linguagem
a diferença entre essas informações pe- Quando se executa um programa
computacional composta apenas de nú-
la ordem em que eles ocorrem no pro-
completo escrito em BASIC, cada linha
meros equivalentes àqueles que o com-
grama. Por exemplo, o primeiro núme- tem que ser interpretada sequencialmen-
putador utiliza. Assim, quando você
te. O computador não armazena os re-
emprega esse código não deve esperar ro em qualquer programa precisa repre-
sentar uma instrução. Se, por engano, sultados dessa tradução; se a mesma li-
que o computador responda em lingua-
você digitar um número qualquer nesse nha for executada novamente, o com-
gem humana.
Consideremos um exemplo extraído ponto, representando um dado ou um putador terá que interpretá-la outra vez.
endereço de algum dado, o computador Sempre que o computador encontra
dos computadores compatíveis com o
Sinclair Spectrum; o código de máqui- tentará interpretá-lo como uma instru- uma instrução em BASIC, executa as se-

na se parecerá com isto: ção válida. A digitação desses números guintes tarefas:
exige, portanto, uma precisão absoluta;
B9 28 08 caso contrário, o programa não funcio-
• reconhecer a instrução em BASIC;
Em BASIC o equivalente é: nará. • traduzir essa instrução para uma sé-
rie de outras em código de máquina;
100 IF A=C THEN GOTO 190 VANTAGENS DO CÓDIGO DE MAQUINA executar as instruções, uma a uma;
O código de máquina consiste, desse
série de números de dois Quando você digita uma linha em • passar para a próxima linha do pro-
modo, numa
dígitos. A letra B da linha acima é, na BASIC, o computador tem que transpô- grama em BASIC.
realidade, um símbolo. Ela representa la para sua própria linguagem, antes de
executá-la. Este é um processo trabalho- Repetido muitas vezes, esse proces-
o número 1 1 em notação hexadecimal.
,

Esses números hexadecimais são in- so que toma muito tempo, pois uma ins- so torna-se lento e moroso. É possível,
troduzidos na memória do computador. trução em BASIC raramente é traduzi- porém, compilar um programa em BA-
Instruções de operação, dados, núme- da para um só comando ou declaração SIC, isto é, traduzi-lo integralmente pa-
em código de máquina. Ela resulta, com ra código de máquina, de uma só vez,
ros, letras, palavras e endereços de me-
em vários códigos de ope- antes de executá-lo, armazenando a tra- i
mória são representados por sinais de frequência,
dois dígitos. E o computador identifica ração. duçào. A compilação é mais eficiente |
IIIIIIIIIIIIHH lllllllllll
que a interpretação, mas os programas 140 CLS 50 NEXT
resultantes são ainda bastante lentos. 150 PRINT "ISTO ESTA EM LIN- ' 55 TEXT HGR
: HOME
: VTAB 24:

Em
contrapartida, a tradução do GUAGEM DE MAQUINA" : PRINT "Isto eata em linguagem
programa em código de máquina dire- 160 FOR N=l TO 1000:NEXT de maquina"
tamente para a operação interna do 170 N=USR0 (0) 60 FOR I - 1 TO 3000: NEXT
computador quase não consome tempo. 180 FOR 1-1 TO 2000:NEXT 65 CALL 800
190 DATA 33.0.60,17,1,60,1-. 255, 70 DATA 169,0.133.20,133,22,1
Nesse caso, há uma simples conversão 3,54,65.237,176,201 69,32
de um número em outro, e não a tradu- 80 DATA 133.21,169,193.133,23
ção de um comando de linguagem em ,160.255
vários outros de código de máquina. Os 90 DATA 177,22.145,20.136.208
programas tornam-se, assim, mais cur- .249.165
10 CLEAR 29999 100 DATA 21 ,201 ,63. 208.1,96.2
tos e eficientes.
20 FOR n-30000 TO 30011 30,21,230.23,76.46.3
Os programas abaixo fazem a mes- 30 READ a
ma coisa, usando BASIC e código de 40 POKE n.a
máquina. Compare suas velocidades re- 50 NEXT n Como você vai ver, tudo que o pro-
lativas. 60 PRINT -lato esta em BASIC" grama faz é encher a tela de caracteres
70 FOR n-16384 TO 22527 ao acaso ("lixo", na gíria dos progra-
80 POKE n.PEEK (n-16384) madores). Entretanto, a velocidade com
90 NEXT n que a versão em linguagem de máquina
10 CLEAR 200.31000 100 CLS faz isso é incomparavelmente maior do
20 DEFUSR0-31000 110 PRINT "lato esta em Código que a do programa cm BASIC.
30 FOR N-31000 TO 31015 de Maquina"
40 READ A 120 PAUSE 100
50 POKE N , 130 RAND USR 30000
60 NEXT 140 STOP
70 CLS0 150 DATA 33,0,0.17,0,64,1,0,24 A grande dificuldade do código de
60 PRINT g0."ISTO ESTA EH BASIC .237,176,201 máquina surge quando se quer escrevê-
lo ou depurá-lo de erros. Poucas pessoas
90 FOR N-l TO 500:NEXT conseguem lembrar-se de todos os có-
100 FOR N-1056 TO 1535 digos numéricos c instruções. Para com-
110 POKE N,PEEK(N+34000) 10 CLEAR200 &.HDFFF , plicar ainda mais, os códigos de opera-
120 NEXT 20 DE FINTA- ção (opcodes) não são distinguiveis dos
130 FOR N-l TO 1000:NEXT 30 AD-S.HEO0O DEFUSR-AD :
outros números que alimentam o com-
140 CLS0 40 FOR I-0TO10 putador. Assim, você não consegue en-
150 PRINT S0.-ISTO ESTA EM CODI 50 READAS
GO DE MAQUINA." tender um trecho de programa, a não ser
160 FOR N-l TO 1000:NEXT
60 POKE AD+I,VAL("&H"+AS)
70 NEXT
que o acompanhe desde o começo —o
170 N-USR0{0) 80 DATA0E.98,ED,6B,0,1,06.FF.ED
que não ajuda quando se está procuran-
180 FOR N-l TO 2000:NEXT .B3.C9 do erros no programa.
190 DATA 206,136,240,142.4.32.1 90 CLS Os códigos numéricos de operação,
66.192,167,126,140,6.0,38.24 7.5 100 PRINT "lato esta em BASIC" além disso, diferem consideravelmente
110 FOR 1-1 TO 1000:NEXT entre si, conforme o microprocessador
120 SCREEN 2 que é usado no computador, de modo
130 PSET (0,0) que traduzir programas em código de
140 FOR 1-1 TO 6144 máquina de um tipo de computador pa-
Atenção: o programa abaixo está es- 150 OUT 152,RND{1)*255 ra outro pode ser bastante difícil.
crito em BASIC para computadores 160 NEXT I Uma forma de contornar esses obs-
170 CLS
com o sistema DOS (disquete) c não se- táculos é subir um pouco mais de nível,
180 SCREEN 0
rá aceito pelo BASIC nível II normal 190 PRINT"Isto esta em cúdigo d e escrever o programa em uma lingua-
(cassete). gem mais fácil de se utilizar do que o có-
Ao ligar a máquina, responda com o 200 FOR 1-0 TO 1000:NEXT
número 60000 à pergunta "Mem. usa- 210 SCREEN 2
da?", ou ainda "Memory size?" (para 220 PSET(0,0)
computadores com 48 Kbyles de memó- 230 FOR 1-1 TO 25
ria apenas). 240 A-USR(B)
250 NEXT
260 GOTO260
10 CLS
20 DEFUSR0--4536
30 FOR N--4356 TO -4523
40 READ A
50 POKE N.A 5 HGR HOME
: VTAB 24 :

60 NEXT N 10 FOR I - 800 TO 836


70 CLS 15 READ N
80 PRINT " ISTO ESTA EM BASIC" 20 POKE I.N
90 FOR 1=1 TO 500:NEXT 25 NEXT
100 FOR N-15360 TO 16383 30 PRINT "Isto esta em BASIC"
110 POKE N.65 35 FOR I - 1 TO 300: NEXT
1120 NEXT N 40 FOR I - 8100 TO 14000
130 FOR N-l TO 1000:NEXT 45 POKE Iv RN D U) * 256
.

illlllllllllBHMWflMHHIIIIIIIIIII!
digo de máquina. Essa linguagem é co- o programa está rodando. Isto dá van
nhecida como Assembly, ou linguagem tagens adicionais de velocidade de exe
Assembler (que vem do inglês, monta- cuçào. 10 CLEAR 29999
Alguns computadores, como o Ap- 20 FOR n-30000 TO 30020
gem).
11, já vêm com um programa embu
30 READ a
Em Assembler, os códigos operacio- ple
40 poke n,a
nais são representados por abreviações tido, chamado monitor, que permite i

50 NEXT n
mnemónicas (isto é, fáceis de lembrar). entrada de códigos de máquina e dado:
60 RAND USR 30000
Por exempio, a operação de carregar cm hexadecimal. Computadores com 70 GOTO 60
(load, em inglês) uma memória com um programas Assembler embutidos em sua 90 DATA 17.0.88.46.0,237,95,
número, tem a abreviatura LD. Uma ROM, entretanto, já são mais raros. No 71,58.140.92,128.230.63,103,1
instrução de desvio (jump) pode ser cha- Brasil, o TK-2000, da Microdigital, é um ,0,3.237.176,201
mada de J, JP, ou JMP, conforme a sin- exemplo. Para os outros computadores
taxe do Assembler em uso. Com algum (linha TRS-80, TRS-Color, MSX, Sin-
treino, é possível ler programas em As- clair Spectrum e ZX-81), existem pro-
sembly tão facilmente quanto em BA- gramas Assembler disponíveis 10 CLEAR 200 Í.HDFFF
,

SIC, embora entendê-los seja algo mais comercialmente, em fita ou disquete. 20 DEFINTA-Z
Você poderá utilizar também, as versões 30 AD-S.HEO00:DEFU5R-AD
complicado.
40 FOR I-0TO10
A desvantagem da linguagem Assem- de Assembler para cada máquina, que
50 READAS
bler ê que o computador não pode uti- serão fornecidas mais adiante.
60 POKE AD+I ,VALCí.H"+AS)
lizá-la diretamente. como no caso do Mas, se você não tem acesso a um
70 NEXT
código de máquina. Antes disso, o pro- 'programa Assembler, pode fazer uma 80 DATA0E.98.ED.6B.0.1.06.FF.ED
grama precisa ser montado por um As- montagem manual. Mesmo para os pro- ,B3 ,C9
sembler, ou tradutor, que é um outro gramas mais simples, é mais fácil escre- 90 FOR 1-0 TO 1000:NEXT
programa escrito em linguagem de má- vê-los em Assembly, e depois traduzi-los 100 SCREEN 3
quina, ou mesmo cm BASIC. manualmente para código de máquina 110 PSET(O.O)
Mas o processo de montagem é bem em hexadecimal, usando as tabelas for- 120 A-USR(Bi
mais simples, quando comparado com necidas com os manuais de programa- 130 GOTO 120
200 FOR 1-0 TO 1000:NEXT
a interpretação de linhas em BASIC. A ção Assembler.
210 SCREEN 3
linguagem Assembler é equivalente ao Tudo isto pode parecer muito abor- 220 PSET(0,0)
código de máquina, ou seja, cada ins- recido; mas, antes de decidir que é isso
240 A-USR{B)
trução em Assembly corresponde a uma mesmo, experimente esses programas 260 GOTO 240
instrução em código de máquina. As- em código de máquina. Eles são intro-
sim, a tradução do programa se proces- duzidos via declarações DATA em pro-
sa palavra por palavra, número por gramas BASIC. Os dados DATA) es-
(

número, etc. diretamente para código de tão listados no fim de cada programa. Um aviso para quem for utilizar o
máquina. programa acima: o programa em lingua-
O Assembler também traduz o pro- gem de máquina altera alguns endere-
grama como um todo, antes que o com- ços importantes da memória de traba-
putador o execute, ao invés de lho do micro. Por isso, é impossível
10 CLEAR 200.31000
interpretá-lo linha por linha, enquanto listá-lo depois de rodar uma vez. Assim,
20 DEFUSRO-31000
você deve digitar o programa e gravá-
30 FOR N-31000 TO 31020
lo em fita ou disquete, antes de rodá-lo.
40 READ A
50 POKE N.A Para rodar no TK-2000, é necessário
60 NEXT fazer as seguintes modificações: todos
70 N-USR0(0) os valores 17. que aparecem dentro das
80 POKE 32767. RND(256)-1 declarações DATA, devem ser mudados
90 FOR N-l TO 100:NEXT para 20. e todos os valores 18, para 21.
100 GOTO 70 Deste modo ele não se autodestrói.
110 DATA 142.4,0,206.136.184,16 10 FOR I - 800 TO 840
6.192,184.127.255.138,129.167.1 20 READ H
28,140,6.0.38.242,57 30 POKE I.N
40 NEXT
ia 50
60
GR
CALL 800
As restrições na configuração da má- 70 DATA 169,0,133,17.169.193.
uina para rodar o programa abaixo são 133,18.160
s mesmas do primeiro programa. 80 DATA 40.162.40.177,17,41.1
5. 32, 100
0 DKFUSRO4536 90 DATA 248 1 38 32 0 248 1 36
. . . , ,

0 FOR N--45.16 TO -4525 208.242.202


0 READ A 100 DATA 208,239,169,254.197,
0 POKE N.A 18.206,1,96,230,18,76.40.3
0 NEXT N Agora, apenas para comparar, tente
0 N-USÍU0) escrever um programa similar em BA-
0 POKE -4534.RNDI201
SIC. Acreditamos que você entenderá
0 GOTO 7 0
00 DATA 33.0.0,17.0.60,1.0.4. nossas razões. E mais tarde, veremos o
237.176,201 que acontece aqui.
IIIIIIIIIIIHI ' PROGRAMAÇÃO Dl JOGOS 1 1N|||||||||II
Se você quer dar mais vida aos seus
jogos, comece a trabalhar

com os caracteres gráficos mais


simples, que já vêm programados na

memória do seu computador.

Programar jogos pode se revelar uma Uma animação muito simples, que plica por que as "antenas" da linha 30
atividade fascinante. Mas não é certa- ilustra os princípios da produção de efei- estão em 241 As posições 238-240 já es-
.

mente das mais fáceis. Por isso, você de- tos de movimentação na tela do micro, tão ocupadas pelo corpo do inseto.
ve começar com coisas simples e ir avan- é a do pequeno "inseto rastejante" (ve- Existe uma maneira melhor de dese-
çando pouco a pouco. Esse procedimen- ja abaixo). Nas páginas seguintes mos- nhar o inseto, que é condensar o pro-
to lhe ensinará a pensar de maneira ló- traremos como conseguir esse efeito pa- grama acima em uma única linha. E, se
gica, melhorando suas qualidades de ra diversos tipos de computadores. você ainda não descobriu, o TRS-Color
programador. É o que vamos aprender tem uma abreviação para PRINT: o ca-
nesta série de lições, até chegar ao de- ractere "?". Quando o programa é lis-
senvolvimento de jogos profissionais e tado, a máquina mostrará PRINT ao in-
complexos. 's de
A primeira coisa que você precisa O programa simplificado fica assim:
aprender para programar jogos, afora
a linguagem BASIC, é a técnica de ani- Para do inseto na tela,
criar a figura
mação, pois a maioria dos jogos mais programe o TRS-Color ou compatível
interessantes é do tipo "videogame", is- (por exemplo, o Prológica CP-400), co- Se você acrescentar mais duas linhas,
to é, tem algum tipo de ação. mo segue abaixo. A declaração PRINT obterá alguma animação:
Para criar a ilusão de movimento, o @ (pronuncia-se "print arroba" ou
programador usa praticamente as mes- "print em") é a maneira que o BASIC
mas técnicas empregadas na elaboração
de desenhos animados. Ele cria duas ou
do Color tem para exibir um ou vários
caracteres em um ponto específico da te- )
O ) )
< OOO
) ) )
< OOO
) ) )
<

mais imagens e as alterna rapidamente la. O número que se segue após o sinal 20 PRLNT @238."000<":PR1NT 620)
— cerca de 24 vezes por segundo. @ é a posição na tela, que começa de ," ( (
{" :PRINT §270, " { (" 1

Existe, porém, uma diferença impor- 0, no canto superior direito, e aumenta 30 GOTO 10
tante. Na animação de um desenho, o de um em um da esquerda para direita A execução deste programa produz
projetor é responsável pela eliminação e de cima para baixo. Como a tela do uma imagem tremida e pouco nítida que
das imagens desnecessárias. O mesmo Color tem apenas 32 colunas, a primei- não se parece nem um pouco com ani-
não acontece com a animação por com- ra linha tem posições @
indo de 0 a 3 1 mação. A razão disso é que as imagens
putador: neste caso, qualquer segmen- A posição 32 já se situa na primeira co- estão sendo trocadas rápido demais. Se
to de um desenho que você "projete" luna da segunda linha e assim por você inserir um laço FOR...NEXT no
permanecerá na tela, a não ser que vo- diante. programa, ele fará com que o compu-
cê imprima alguma coisa sobre ele, pois 5 CLS tador pare e conte, deixando a anima-
o computador não pode colocar, simul- 10 PRINT «236, "000" ção mais clara. Qualquer número pode
taneamente, duas imagens na mesma 20 PRINT #206.")))- ser usado com os laços FOR...NEXT(li-
posição. 30 PRINT #241, "<" nhas 15 e 25) e não apenas 15. Outros
Por exemplo, se a linha 10 diz ao 40 PRINT #270,")))" números resultarão em uma espera
computador para colocar um A em um Este programa é uma forma bastan- maior ou menor.
determinado lugar, qualquer linha im- te elaborada de criar uma imagem mui- Experimente adicionar estas linhas:
pressa posteriormente —
digamos um B to simples, mas ele ilustra alguns pon-
— no mesmo local, apagará o A.
, tos interessantes: 15 FOR L-l TO 15
17 NEXT L
Mas, e se não houver nada que você Emprimeiro lugar, ele lhe dá uma
25 FOR L-l TO 15
queira imprimir no lugar do caractere na
idéia a respeito das posições relativas
27 NEXT L
indesejado? Então você deve se lembrar tela. O
meio do inseto está, aproxima-
de incluir no seu programa uma linha damente, no centro do vídeo, na locali- Agora você tem um inseto que esper-
que coloque um espaço em branco na zação 239. Como você vê, estamos usan- neia incessantemente, um tanto sem ra-
posição de interesse. Caso isso não seja do caracteres "normais" (isto é, dispo- zão; apesar disso, a tela nos mostra uma
feito, seu vídeo logo estará repleto de in- níveis no próprio teclado padrão, como animação convincente.
cómodos pedaços de braços, pernas e a letra O, o sinal de parênteses, etc.) pa-
corpos! ra compor a figura do "bicho". GRÁFICOS DE BAIXA RESOLUÇÃO
Há grandes diferenças entre os com- Além disso, ele mostra o que acon-
putadores na maneira de se obter os ca- tece quando fazemos com que o com- Você pode usar os caracteres gráficos
racteres (sinais) gráficos na tela. Os ca- putador imprima mais que um caracte- de baixa resolução do seu computador
racteres gráficos padronizados variam re em uma única posição de tela ele — para criar figuras animadas mais inte-
muito em tipo e disposição, assim como simplesmente vai em frente e coloca os ressantes. O Manual do Usuário mos-
a maneira como são impressos na tela, próximos caracteres nas posições subse- tra quais são esses caracteres. Cada um
le como são movimentados. quentes (de numeração maior). Isto ex- deles tem um código (um valor de 128
iiiiiiiiuiHH ' p'OGRAMAÇÃOD[joGos^mmmnmitt\\\\

MOVIMENTE AS FIGURAS NO VÍDEO


COMO NU M DESENHO ANIMADO
APRENDA A USAR
CARACTERES GRÁFICOS

130 PRINT 6300.CHRSU37) :PRINT6


303.CHRS1143) PRINT 6305.CHRSU
:

39)+CHRS(141)
140 FOR X-l TO 20
150 NEXT X
160 GOTO 10
Não preocupe com a linha 10 do
se
programa. CLEAR 500 reserva espaço
na memória para as cadeias de caracte-
res dos códigos CHRS e CLS. Examine
os sinais gráficos representados pelos có-
digos após CHRS no programa e tente
entender como a espaçonave foi cons-
truída. A instrução + CHRS ( " )' sig-

nifica 'PRINT CHRS ( ) na próxima


posição de tela'.

Eis aqui o programa que anima o in-


seto, movendo-o pela tela:
10 CLS
20 FOR N=0 TO 28
30 PRINT ê!92+N " ": PRINT 622
. )
) )
)
4+N "0OO< " PRINT 6256+N "
, .
: ) )

40 FOR X=l TO 10
50 NEXT X
-
60 PRINT 6192+N." :PRINT §22
programa seguinte utiliza caracte-
4+N," " PRINT 6256+N,"
:

gráficos do baixa resolução para ani-


70 PRINT 6192+N. "(<<" :PRINT 622
mar um satélite rotatório (a fig. 1 mos- 4+N,"000<":PRINT 6256+N,"{{("
tra os dois desenhos que são alternados 60 FOR X=l TO 10
no programa). 90 NEXT X
10 CLEAR 500 CLS :
100 PRINT 6192+N." ":PRINT 62
20 PRINT 6174, CHRS (14 ») 24+N." -iPRINT 6256+N,"
1) :PR1NT617B.CHRS(143) 110 NEXT N
30 PRINT 6206. CHRS (140) ims(i3 120 GOTO 20
2) *-CHRS(141) Existem três laços FOR.. .NEXT no
-10 PRINT 6236,CHRS(137)+CHRS(12 programa. Os dois que utilizam X dimi-
9)+CHRS (129)+CHRS (129) + CIIR$U29 nuem a rapidez de impressão fazendo o
a 143 para os micros da linha TRS- )+CHRSU29)+CHRSU41)
Color). Para mostrá-los no vídeo você computador contar até dez; o que usa
50 PRINT 6268,CHRS(13S)+CHRS(13
usa a função CHRS seguida do código 2) +CHRSU32)+CHRS <132)+CHHS (132
N faz com que o inseto se mova na tela.
do caractere entre parênteses. )+CHRSU33)+CHRS(135) Você pode não ter entendido por que
Por exemplo, para imprimir o carac- 60 PRINT 6300.CHRSU43) :PRINT63 a linha 20 mostra FOR N = 0 TO 28 se
tere representado pelo código 138 no 03,CHR3(133) PRINT @305.CHR3(14
: existem 32 posições disponíveis em ca-
meio da tela, digite: 3) +CHRS 143)
( da linha da tela. A razão para isso é que
70 FOR X = l TO 20 o inseto tem quatro espaços de compri-

»
10 PRINT6 239. CHRSU38) 80 NEXT X mento, e, se houvesse mais que 28 na li-
90 PRINT 6173. CHRS (141) PRINT61 nha 20, a antena apareceria no lado
-HDDD
:

77.CHP.SU41)
-EDCDED oposto do vídeo, uma linha abaixo. Is-

mm
«"HEHBDD «EiEDD
irrrrri
"BliilHD "«5SBBBBB
HKDLDHE
100 PRINT €205, CHRS (139) +CHRS
40) +CHRS (140) +CHRS (137)
110 PRINT 6236, CHRS (138) +CHRS (1
30) + CHRS 130) t-CHRS 1 30) +CHP.S (1
!

0)+CHRSU30)+CHRS<143)
(

120 PRINT 6268,CHRS(139)+CHRS(1


(
to acontece devido ao modo com que as
posições de tela são numeradas. A po-
sição 32, por exemplo, é a primeira da
segunda linha, a partir do lopo da tela.
As linhas 60 e 100 parecem não estar
36)+CHRSU36)+CHRS(136)+CHRS (13 imprimindo nada; elas são as linhas!
Como construir o seu satélite. 6)+CHPS(137)+CHRS(143) "apagadoras" descritas anieriormente.l
" ,

IIIIIIIIIIIUMM^u^k^mMHHIIIIIIIIIII

Para os micros da linha TRS-


programas acima podem ser modifica-
dos com facilidade, bastando alterar os
Os truques para desenhar figuras e
íovimentá-las são iguais aos ensinados
para o TRS-Color, ou seja, basicamen-
te, o comando PRINT @, e a função
CHRS usada em conjunto com os códi-
m
_II_IK
dl ! ji
tiii
128 128

152 131
158 128 128

190 176 128

números após os comandos PRINT @


já que nesses micros uma linha lem 64
gos numéricos dos caracteres gráficos.
As duas únicas diferenças são as se-
* ta 136 157 172 125

D
II

colunas, ao invés das 32 da linha Color.


O meio da tela fica mais ou menos m
na posição 450. Subtraindo 64 dessa po- —
O conjunto de caracteres gráficos 123 160 133 170

sição lemos 386 para a posição inicial do TRS-80 é bem maior, pois cobre os
das perninhas de cima, e somando 64, códigos de 129 a 191. Cada caractere é 136 145 128 128 128
obtemos 514 (para as perninhas dc bai- a combinação de seis pontos em uma HEI IL
xo). Finalmente, 453 nos dã a posição grade de três de altura por dois de lar-
das antenas. O programa final fica gura (o TRS-Color possui caracteres
assim:

10 PRINT £450 "00O<" PRINTS386,


,
:
gráficos em uma grade de 2 x 2, ou se-
ja, com combinações de quatro ponios
_LyL 128 128 187 128 128

por caractere).
")))": PRINT§514 "
15 FOR L=l TO 15
.
) )
)

— Como dissemos acima, o número


i-iH se 172 157 142 128

17 NEXT L MG
20 PRINT e450."000<":PRINTe386, de posições @ na tela também é maior:
ÍTCT1 130 174 128 128

" (" :PRINT@514, "


( [ ! (
(
1024 (dezesseis linhas de 64 colunas
25 FOR L=l TO 15 cada). 186 130 148 123
27 NEXT L
30 GOTO 10 Os efeitos gráficos de baixa resolução
ulihu 176

TRABALHE COM CARACTERES GRÁFICOS


no TRS-80 são potencialmente mais ri-
cos e detalhados do que o Color (com
apenas uma desvantagem para o'primei-
JUUL
O corredor em duas
129 128 128 181 128

DOfiiCÕeS.
com atenção tudo o que
Estude agora ro: não podemos escolher a cor dos ca-
está dito na seção sobre o uso de carac- no TRS-80, que tem o
raclere.s gráficos
teres gráficosno TRS-Color. Ela se apli- vídeo monocromático). faça algo mais difícil: animar um cor-
ca exatamente aos micros da linha Experimente fazer um programa redor de maratona. A definição da fi-
TRS-80, que têm apenas caracteres grá- igual ao do Color, para traçar o satélite gura do corredor em caracteres gráficos
-ficos de baixa resolução. (combinação de vários CHRS), e depois da linha TRS-80 pode ser vista na fig. 2.
"

IIIIIIIIIUUHi ' PtOOKAMAÇÃODUOGOS I


1H|||||||||||
10,17 já estão ocupadas pelo corpo do ra "1 TO 5" ou '1 TO 20", por exemplo.
inseto. O inseto criado até agora pode pare-
Abaixo vemos como programar o pe- Uma maneira mais conveniente de cer inútil e estúpido, pois esperneia co-
queno "monslro rastejante" para qual- compor o inseto consiste em condensar mo louco mas não se move. Mais
quer micro da linha Sinclair (por exem- as instruções acima em uma única linha; adiante veremos como essa situação se
plo, o TK-85 ou o TK-90X). Para co- desta forma (só vale para o TK-90X): modifica (seção MOVIMENTO).
meçar, tente criá-lo numa posição es-
10 PRINT AT 10,15; "000<" ;AT 9
tática:
,15;")))"iAT 11,15:")))" COMO ANIMAR UMA FIGURA
10 PRXMT AT 10.15;"0oo"
20 FRINT AT 9 , 1 5 ;
"
) )
J
Adicione agora mais duas linhas e vo- Uma animação mais interessante po-
Ml PRINT AT U.lSi")))" cê terá animação: de ser produzida utilizando os caracte-
•10 PRINT AT 10.18; 20 PRINT AT 1U,15;"000<";AT 9 res gráficos padrão da linha Sinclair. Te-
("
O programa usa a declaração PRINT ,15;" ( ( ( " AT 11,15; "((
;
mos um exemplo na fig. 2.

AT, que serve para colocar em algum 30 GOTO 10 O programa completo é dado mais
ponto da tela um caractere ou conjunto Quando executar esse programa, vo- abaixo; no entanto, se você não está ha-
de caracteres. Os números que se se- cê verá que ele produz uma imagem bituado aos símbolos gráficos, será in-
guem à declaração PRINT AT represen- pouco nítida. Isso acontece porque as teressante criar, inicialmente, uma figu-
tam o número da linha onde ficará a imagens são trocadas muito rapi- ra estática, compondo uma linha de ca-
figura Ique vai de 0 a 21), e o número damente. da vez, deste modo:
da coluna (que vai de 0 a 3 1 >. Assim, A melhor maneira de desacelerar o 1 PRINT AT 5 15 "0"
,
;

PRINT AT 10,6; "A", por exemplo, processo é usar um laço FOR...NEXT 2 PRINT AT 6,14;"
pede ao computador para escrever a le- que faz com que o computador conte até
ira A na posição definida pela linha 10 dez (ou qualquer outro número que vo- ... e assim por diante.
e pela coluna 6 da tela (um quadricula- cê queira). Antes de imprimir a imagem Encontrar esses caracteres gráficos é
do imaginário, como em um jogo de seguinte. Experimente, então, adicionar relativamente fácil. Para obter aqueles
batalha nava!'). estas linhas ao seu programa (no TK-85 da linha 2 acima, por exemplo, tecle
Ele mostra o efeito de ordenar ao use 2 ao invés de 10): CAPS SHIFT (SHIFT no TK-85) e 9.
computador que imprima mais que um simultaneamente. Isso o coloca no mo-
15 FOR L-l TO 10
caractere numa mesma posição da tela: do gráfico indicado pelo G piscando na
17 NEXT L
ele simplesmente avança e imprime os tela. Então, no TK-90X, pressione
25 FOR «-1 TO 10
caracteres seguintes nas posições vizi- 27 NEXT M CAPS SHIFT e 6 juntos para obter uma
nhas. Esta é a razão pela qual as "ante- versão invertida —
preto no lugar do
nas" do inseto na linha 40 estão em Você pode variar a duração da pau- branco —
do símbolo da tecla 6; depois
10.18. As localizações 10,15; 10,16 e sa simplesmente mudando '1 TO 10' pa- CAPS SHIFT e 8 e 6 sozinhos. No
' "

J PROGRAMAÇÃO DE JOGOS 1

TK 85 pressione SHIFT e T; SHIFT e


SPACE; SHIFT c V. Finalmente, tecle
9 para deixar o modo gráfico antes de Agora que você já sabe animar urna O programa que movimenta a "tatu-
inserir as aspas no fim da linha. figura, podemos passar ao programa rana" usa exatamente os mesmos carac-
Aqui temos o programa completo pa- que faz com que ela se mova pelo vídeo: teres que os outros computadores. O
ra formar a figura: que muda é o comando para posicioná-
10 FOR N-0 TO 27
lo, que nos computadores da linha MSX
10 PRINT AT 5,14;"i 'O J " AT 6, 20 PRINT AT 10,N;"OOO<'
:
t (por exemplo o HotBit, da Sharp) rece-
" ( ( " ; AT ll.N;"((<"
PRINT AT 10 ,N; be o nome de LOCATE. Esse comando
AT i4:*a a H"
20
e.
PRINT AT 5.14;"G0G";AT 6, • t AT N
40 PRINT AT 10.N; "O0O<"
U ,
; posiciona o cursor sobre a tela, em uma
posição definida pelos dois números que
14: VB5J-1AT 7.14;-ftjBtl-i se seguem ao comando LOCATE. O
AT 8. 14; "RD B' ")))":AT 11, N;")))"
30 GOTO 10 PRINT AT 10,N;"OOO<" primeiro número refere-se ã coluna, e o
" AT 11 ,N ;
;
segundo, à linha. Assim, por exemplo,
É
possível que você sinta necessida- 60 NEXT N LOCATE 12,4 coloca o cursor na colu-
70 GOTO 10 na 12 e na linha 4. Qualquer comando
de deinserir novamente um laço
FOR...NEXT depois da linha 10 e ou- Este programa também usa um laço PRINT que seja dado após isto escre-
tro após a linha 20 para desacelerar a FOR... [NEXT, porém com uma finali- verá o caractere (ou caracteres) a partir

BO LBG
ação. dade completamente diferente da do da posição definida pelo LOCATE.
exemplo acima. Lá o computador fazia Agora, digite o programa:
uma contagem, por frações de segundo, 5 CLS
antes de imprimir uma imagem. Agora 10 LOCATE 18,10:PRINT
1

ele é responsável pela movimentação da 20 LOCATE 18,9:PRINT


"

imagem, que assume uma posição de ca- 30 LOCATE 21,10:PRINT 1

da vez na superfície da tela. 40 LOCATE 18,11:PRINT


1

E por que a linha 10 mostra "O TO 42 FOR 1-1 TO 30


27", se a teia do Sinclair tem, no total, 47 NEXT I
32 posições? Para descobrir, modifique 50 LOCATE 18.10:PRINT

ano heb
Um dançarino feito de doze quadrinhos.
a linha 10 para:

10 FOR N=0 TO 32
60 LOCATE 18,9: PRINT

82 FOR 1-1 TO 30
87 NEXT I
"

70 LOCATE 21, 10: PRINT


80 LOCATE 18,11:PRINT

Outra dúvida pode ser em relação ãs 90 GOTO 10


linhas 30 e 50. Experimente apagá-las e
você logo descobrirá sua utilidade. Quando o programa é executado, vo-
cê pode observar a figura do "inseto"
"

HlllllllllUt ' HOGRAMAÇiODtJOGOS /


1H|||||||||||
vibrando rapidamente. Ela é criada pe- IMAGENS EM MOVIMENTO um o valor da variável P, cada vez que
lasobreposição dos dois conjuntos de o programa se repete. Como Pé argu-
caracteres,que estão nas linhas com o O
próximo passo é alterar o progra- mento da instrução LOCATE (indexan-
comando PRINT. Ao mesmo tempo, o ma de forma que o corpo do inseto se do o número de Unha, ou o eixo X), is-
comando GOTO, na última linha, faz movimente pela tela. Para isto, utiliza- to faz a figura se movimentar um passo
com que o programa se repita indefini- mos a declaração LOCATE, já descrita. para a direíia, a cada ciclo do programa.
damente, pois retorna sempre ao seu iní- Neste caso, usaremos uma variável As linhas 50, 60, 70, 1 10, 120 e 130
para fazer com que a função LOCATE apagam as posições antigas do inseto.
O movimento das patinhas da "ta- mude coniinuamente a posição do cur- Retire-as e veja o que acontece.
turana" é bastante veloz, e quase não dá sor, de modo que os PRINT's que pro- Quando você roda o programa, o in-
para perceber o efeito da animação. Por duzem a imagem dêem a impressão de seto atravessa a tela e pára em sua mar-
isto, precisamos dar um jeito para dimi- deslocamento. Para fazer variar o valor gem direita. Para fazê-lo voltar à origem
nuir a velocidade. A maneira mais fácil desta variável que afeta o LOCATE, e começar o "passeio" novamente, ex-
de se fazer isto é utilizarmos a declara- usamos um outro laço FOR.. .NEXT perimente digitar a seguinte linha adi-
ção FOR. ..NEXT, que cria um laço de mais externo àquele que anima o bichi- cional ao programa acima:
repetição 'no vazio', isto é, apenas pa- nho:
ra gastar um pouco de tempo (explica- 10 FOR N-0 TO 36
remos na próxima lição dc programação 20 LOCATE N,15:PRINT 'OOQ<"
BASIC como se usa este tipo de laço). 30 LOCATE N,14:PRINT "(IC COMO CHEGAR AOS CARACTERES GRÁFICOS
(
Assim, introduza a linha: 40 LOCATE N,16:PRINT " (

Os computadores da linha MSX tem


(
"
50 LOCATE N,15:PRINT
45 FOR T-l TO 100 : NEXT 60 LOCATE N.14:PRINT " * um grande conjunto de caracteres grá-
"
;0 LOCATE N,16:PRINT ficos à disposição do programador do-
A seguir, rode o programa e observe 80 LOCATE N.15:PRINT "00O<" tado de instinto exploratório. Eles são
como o efeito de movimentação das pa- 90 LOCATE N,14:PRINT "))}" digitados a partir do próprio teclado, e
tas tornou-se muito mais lento. Isso foi 100 LOCATE N,16:PR1NT ")))" podem ser usados para criar figuras e
"
possível porque o laço criado na linha 110 LOCATE N.15:PRINT desenhos mais elaborados.
— 120 LOCATE N,14:PRINT "
45 funciona como um contador nes-
130 LOCATE N,16:PRINT
" Para ter acesso a estes caracteres, vo-
te caso, contando até 100, quando en- cê deve utilizar as teclas GRAPH, CO-
140 NEXT N
tão, ao terminar a contagem, prossegui- DE e SHIFT, juntamente com as demais
rá executando o programa a partir da li- O que fizemos foi simplesmente tro- teclasdo teclado. No manual do seu
nha 50. car o comando GOTO na linha 90 do computador podem ser encontradas
Pode-se variar a duração dessa pau- programa anterior pelos comandos "mapas" do teclado, que indicam as te-
sa simplesmente mudando-se o número FOR.. .NEXT, que aumentam de um em
100 para outro qualquer. Quanto maior
maior será o
for esse valor numérico, re-
tardo de tempo provocado.

*
r

IIIIIIIIIHHI ' P10GRAMACAODUOGOS ,


|H|||||||||||
cias associadas a cada caractere gráfico
GE Eli i r
Agora, lente digitar alguns caracte- Os possuidores de micros compalíveis
\ -
res gráficos. O símbolo de espadas do com a linha Apple II e derivados, bem
\ -
baralho, por exemplo, pode ser obtido
pressionando-se as teclas GRAPH
(cediíha). O símbolo do naipe de ouro
e Ç
como os que têm um Microdigilal
TK-2000, podem rodar os mesmos pro-
gramas listados acima para os micros da
X X X XXXI *
-\-r'
II
pode ser obtido pressionando-se as te- linha MSX. Algumas modificações, po- s
clas SHITT, GRAPH e Ç simulta- rém, devem ser feitas, face às diferen-
neamente. ças dos modelos:
1 li 1
O programa abaixo faz a animação
II

gráfica de um helicóptero visto de cima, todos os comandos CI.S (usados


demonstrando como podem ser usados para limpar a tela) devem ser substituí-
1. I II II t /
os caracteres gráficos dos MSX. dos pelo comando equivalente HOME. /
5 CLS J.
. yS
10 LOCATE 13,5: PRINT
20 LOCATE 13,6: PRINT T X XXX XX 1*1 II*
30 LOCATE 13.7: PRINT _\ / ™—
40 LOCATE 13,8: PRINT
50 LOCATE 13,9: PRINT
/- :

60 LOCATE 13.10:PRINT 1 1

70 LOCATE 13.11:PRINT /
80 LOCATE 13,12:PRINT Coma construir um helicóptero.
90 LOCATE 13,13;PRINT
100 LOCATE 13.5:PRINT • nos micros da linha Apple não há
110 LOCA'.' 13,6:PRINT a insirução LOCATE, mas ela pode ser
120 LOCATE 13, 7: PRINT substituída por duas outras, que são
130 LOCATE 13.8:PRINT HTAB VTAB
e (tabulação horizontal e
140 LOCATE 13,9:PRINT
vertical, respectivamente).
150 LOCATE 13,10:PRINT
Essas duas funções controlam o po-
160 LOCATE 13,11:PHINT
170 LOCATE 13,12:PRINT sicionamento horizontal e vertical do
180 LOCATE 13,13:PRINT cursor, antes de dar um PRINT. O co-
190 GOTO 10 mando HTAB é acompanhado de um
número entre e 40, que determina a co-
I

luna dc posicionamento; já o comando


VTAB faz o mesmo com a linha (de 1

a 21).
Assim, por exemplo, onde esiá escri-
to, no programa para o MSX:

20 HTAB 18:VTAB 10:PRINT "000"

20 LOCATE 18,10: PRINT "00o'


O programa do helicóptero não po-
de ser introduzido em micros da linha
Apple, pois estes não possuem caracte-
res gráficos. O mesmo não acontece com
o TK-2000, cujos caracteres estão dis-
poníveis através do teclado, ao se pres-
sionar as teclas <CONTROL> e B.
simultaneamente, ou por meio da fun-
ção CHR$ 1442), através de programa.
Consulte 0 manual do TK-2000 c iden-
tifique os códigos dos caracteres usados
nesse programa.
Se você quiser inventar novas figuras,
basta usar os gráficos da tabela existen-
te no manual ou os caracteres padroni-
zados do teclado, ou os dois juntos. Ca-
so seu computador seja diferente dos
mencionados acima, proceda da seguin-
te maneira: desenhe as figuras em papel
quadriculado e faça seu próprio progra-
ma, utilizando os caracteres gráficos dis-
poníveis no seu computador.
IIIIIIIIIIIIHH^^HlHHaHHIIIIIIIII
H rUlYLMU nl\JU l/UIVIrMnH^UCtj LUIVI Ir ... 1 nciv

COMO SAQ CRIADOS NÚMEROS DOIS JOGOS DE ADIVINHAÇÃO


ALEATÓRIOS PARA VDCE PROGRAMAR
APRENDA A USAR VARIÁVEIS FAIXAS DE GERAÇÃO

ACASO A DECLARAÇÃO INPUT DE NÚMEROS ALEATÓRIOS

Pense em um número ao acaso: é assim,


aleatoriamente, que muitos

jogos são criados pelo computador.

Ninguém aprende a jogar Futebol


praticando apenas uma jogada de eada
vez, para só enirar numa pari ida quan-
do iodos os lances possíveis estiverem
assimilados. Se alguém escolhesse esse
método, teria de esperar a vida inteira,
pois o número de jogadas possíveis é
praticamente infinito,
O mesmo, felizmente, não acontece
com aprogramação de computadores,
que pode ser aprendida de modo gra-
dual. Assim, os manuais que acompa-
nham os computadores ensinam uma
Função ou comando de cada vez. Voeê
pode aprender por ele, se quiser. Mas a
Forma mais divertida de Fazer isso è co-
meçar a jogar desde o começo, apren-
dendo na prática.
O jogo mais Fácil de ser programado
em um micro doméstico é aquele em que
o computador "inventa" um número
aleatório (ao acaso), e o jogador tenta
adivinhá-lo.

Os computadores domésticos têm um


gerador de números aleatórios (ou ran-
dõmicos) que permite inventar jogos.
Ele é operado, em BASIC, pela Função
RND. Em alguns computadores, en-
tretanto, os números produzidos não nando a função INT (uma abreviação
são muito úteis na sua Forma original da palavra inglesa integer, que quer di-
— são todos Frações decimais entre 0 e zer inteiro) a estas linhas.
0.99999999. Para verificar isso, digite
10 LET X RND ll)
20 PHINT X
este programa, teclando primeiramente
30 GOTO 10
NEW para limpar da memória qualquer
programa já existente: 10 LET X.-INT (BND*6)
(Lembre-se de teclar <ENTKR> ou

DD
LO LET X=RND (0)
< RETURN > - dependendo do seu com-

putador - após cada linha do programa.)


Quando você executar esse programa
(use comando RUN), vai obter uma se-
LET X - INT ( RND (1)
PR INT X
20 PR1NT X quência de longos números decimais,
30 GOTO 10
30 GOTO 10 rnuíto distante de um jogo de adivinha-
ção (para saber por que é assim, veja o Isso vai gerar números inteiros entre
quadro Perguruas e Respostas na pági- 0 e 5. Nos computadores da linha
na 13). TRS-80, não é preciso utilizar a função
10 LET X-RND Então, como conseguir que o compu- INT, pois a função RND a realiza se re-
20 PHINT X tador produza somente números intei- ceber um número inteiro positivo como I
30 GOTO 10 ros ?
1
A resposta é muito simples: adicio- argumento:
" " " "

IIIIIIIIIHHH^MHHMMBHIIIIIIIIIII
il • ^iiiiBS 1

Agora
LISTAGEM DO PROGRAMA

digite o programa abaixo (o si-


10 LET X=RND(6>-1 INPUT G
20 PRINT X nal <> significa "é maior que e me-
30 GOTO 10 Agora que o computador tomou co- nor que" ou diferente de):
nhecimento do seu palpite, pode com-
(Lembre-sc sempre de pressionar pará-lo com o número secreto gerado
<RETURN> ou < ENTER > após di- (que está guardado na variável X). Isso
gnar cada linha.) é feito de uma forma muito simples, 20 LET X-RND(6}-1
Qualquer que seja o computador que equivalente à frase: 30 PRINT "O COMPUTADOR ESCOLHEU
estiver usando, você não está limitado UM NUMERO ENTRE 0 E 5. VOCE PO
a trabalhar com números entre 0 e 5, po- SE X-G ENTÃO ESCREVA 'MUITO BEM!" DE ADIVINHA-LO?"
dendo escolher igualmente 10 ou 10 000 40 INPUT G
como número máximo: o computador Em programação BASIC fica assim: 60 IF G-X THEN PRINT "MUITO BEM
sempre sorteará um valor compreendi- !"ELSE PRINT "QUE AZAR - VOCE E
do entre 0 e o número máximo es-
colhido.
• -
UiiiiSS RROU !

IF X*G TIIEN PRINT '


MU CTO HKH! '

APRENDA A USAR VARIÁVEIS A declaração IF ... THE1N, sem dú- Para os micros compatíveis com o
vida, é muito útil. Você vai usá-la mui- ZX-81, digite em maiúsculas.
tas vezes na programação.
20 LET X-INT <RND*6)
Ao escrever o programa acima, além 30 PRINT "O Computador eacolh
de selecionar um número aleatório, vo-
eu um numero entre 0 e 5. Ten
cê deu um nome a ele (X). Dai em dian-
te, no programa, ioda vez que o X for
colocado, o computador "saberá" que
você se refere àquele número aleatório.
Esse nome, que permite ao compu-
tador identificar um valor, de tal for-
ma que possa compará-lo com outro
rn~n te adivinha-lo.
40 INPUT G
60 IF G-X THEN
bem!
60 IF GOX
PRINT "Muito

THEN PRINT "Que


azar - Voce errou!"

número, fazer operações aritméticas


com ele, etc, é chamado de variável. A \sxmm
variável corresponde, grosso modo, ao
20 LET X-INT(RND(1)*6)
rótulo de uma caixinha individual na 30 PRINT"0 Computador escolheu
memória do computador, onde armaze-
namos valores.
I um numero entre
divinhã-lo.
0 e 5. Tente a

40 INPUT G
60 IF G-X THEN PRINT "Muito bem
A DECLARAÇÃO INPUT
\ função do cursor é mostrar, na lelu. 80 IF GOX THEN PRINT "Que azar
o Intui onde aparecerá » caractere
- Voce errou!"
Em nosso joguinho, após ter gerado prestei i ser digitado. Nu computador
o número aleatório, o passo seguinte se- Rode este programa e você verá que
rá avisar o computador de modo a fazè- pequeno sinal de sublinha (pie aparece já dá para jogar, mas ainda não é mui-
lo aceitar seu palpite. Para isso, você de- na linha ainda não preenchida. to divertido. Para começar, a teta vai fi-
ve utilizar a declaração INPUT. Ela diz V.m outros computadores, entretanto,
cando um tanto congest ionada e, o que
ete podt ser um pequeno rciàngido cheio.
ao computador para ficar esperando até é pior, o jogo acaba logo após a primei-
que alguma informação tenha sido di- ra tentativa!
gitada pela pessoa que está usando o Para resolver o primeiro problema,
programa. Os micros das linhas TRS-80, TRS- você só precisa acrescentar:
A declaração INPUT sozinha, MSX uma
tanto, não tem sentido. Precisamos
necer ao computador um nome de va-
entre-
for-

riável para que ele saiba como identifi-


Color e lèm
declaração que é o IF
5E(em bom português, SE ... ENTÃO
...

... SENÃO). Neste caso, o programa-


extensão a essa
THEN ... EL-
iQ^S5
10 CLS
car o dado a ser digitado c armazenar dor pede para o computador fazer algu- 50 CLS
o seu valor na memória. Vamos supor ma coisa a mais, caso a condição de teste
que queremos entrar um dado na variá- (por exemplo, se os números são iguais)
vel G (de guess, ou palpite, em inglês). não seja satisfeita. Nos computadores SBE]
Poderia ser perfeitamente um outro no- que não têm a declaração ELSE co- — 10 HOME
me qualquer, envolvendo uma ou mais mo é o caso dos compatíveis com a li- 50 HOME
combinadas, tal como PALPITE,
letras nha Apple e com as linhas Sinclair
se vocêachar interessante. ZX-81 e Spectrum —
se os dois núme-
Assim, a declaração completa fica da ros não forem iguais o programa pas- A declaração CT.S quer dizer "limpe
maneira como segue (não a digite sará automaticamente para a linha se- a tela" (dear screen). Para os compu-
ainda): guinte àquela onde está o comando IF. tadores da linha Apple, a declaração
IIIIIIIIIHHHMHHHHHMHBHIIIIIIIIIII
equivalente é HOME,
que significa "vá 100 INPUT AS
para casa" (no caso, o cursor vai para 110 1F AS-"S" OB AS-"s" THEN
o alto da tela quando esta fica limpa).
GOTO 10
120 GOTO 100
Assim, somente as informações novas
aparecem no vídeo. Lidar com o segun-
do problema é um pouco mais difícil. HEIS]
Uma forma de resolvê-lo seria colocar 10 HOME
um GOTO na linha 90, de modo a rei- 20 LET X INT RN D (1) * 6)
(

niciar o jogo automaticamente. Mas is- 30 PHINT "O Computador sorteou


so faria com que a leia limpasse brus- um numero entre 0 e 5. Sera qu Como se especificam os intervalos de
camente, e o jogador não poderia ver a e voce consegue advinhar ?" números aleatórios?
tempo a mensagem: 40 INPUT G As funções RND nos micros da linha
50 HOME Sinclair, RNDM no Apple TK 2000
) II,

THEN PP.INT "Muito e MSX, e RND(O) nos compatíveis


• •
ibiSS 60

70
IF G - X

IF G < > X THEN PR INT " Q


com o TRS-80 e Color, geram
ros aleatórios distribuídos entre 0 e
âza i Voo 0.9999999. Se voce quiser um
90 PRINT "Quer brincar de novo mero aleatório distribuído em uma
? Se quiser, tecle 'S" e apert xa maior de números, multipliqui
VARIÁVEIS ALFANUMÉRICAS
e a tecla RETURN . número obtido através das formas
100 INPUT AS acima por uma constante. Por exem-
Uma maneira melhor
oferecer é ao plo, para obter um número entre 0 e
110 IF AS - "S" THEN GOTO 10
jogador a opção de um novo jogo ape- 39.99999999. basta multiplicar a sai
120 GOTO 100
nas no caso de ele o desejar. Pode pare- da da função RND por 40.
cer um pouco complicado, mas, na prá- Para gerar números inteiros, use a
tica, é bastante simples. função INT. Um número inteiro entre O
Comece digitando o programa: e 39 é produzido através da expressão
INT (função RND original ' 401. Se vo
cè quiser números distribuídos entre 1
e 40 adicione 1 ã expressão anterior.
Nos micros da linha TRS-80, para ge-
10 CLS
rar um número aleatório entre 1 e 40,
20 LET X-RND(6)-1
use RNDI40I
30 Pt TNT "O COMPUTADOR ESCOLHEU
UM NUMERO ENTRE 0 E 5. VOCE PO Alguns computadores utilizam as pala-
DE ADIVINHA-LO?"
vras RAND, RANDOM ou RANDOMI-
40 INPUT G
ZE. Para que servem?
50 CLS Para evitar a repetição da seqúén-
60 IF G-X THEN PRINT "MUITO BEM cia de números aleatórios gerada pelo
l-ELSE PRINT "QUE AZAR - VOCE E computador. Os micros da linha
I
RROU TRS-80 têm a declaração RANDOM, e
90 PRINT "VOCE QUER TENTAR OUTR
os da linha ZX-81 a RAND. Nestes úl-
,

A VEZ?":PRINT"SE QUISER DIGITE .


timos, RAND 1 íou RANDOMIZE 1 no ,

"S
1

E PRESSIONE<ENTER>" caso do Sinclair Spectrum e compatí-


Vocí já «leve ler-sc perguntado
100 INPUT AS veis! assegura que a sequência aleató-
que significado leni u pOBttttfftO
110 IF AS-"S" THEN GOTO 10 seja constante. Quando usamos
nos programai át computadores. ria
120 GOTO 100 RAND ou RANDOMIZE sem argui
Vejamos: is linhas no lopo da tela
são as InrtmcÕes di> programador: to, ou seguidos de 0, a sequência
BI qni >í'm a seguir mostram ca se repete.
os resultados ,w execução
Para o programa abaixo rodar cor- dessa* lutracSM, lima virgula, por
90 PRINT "Voc6 quer tentar outr
retamente nos compatíveis com o oulro lado. significa "tabule"; já um
a vez? Se quiser, di
ponlo e virgula quer dizer "justaponha"
ZX-81, digite tudo em maiúsculas e gite S e pressione RETURN*
c um apóstrofo no Spectrnn
substitua a linha 1 10 por: 100 INPUT AS
significa "imprima na provim a linha"
110 IF AS"*S* THEN GOTO 10 110 IF AS-"S" OR AS-"s" THEN GO
TO 10
120 GOTO 100
10 CLS
20 LET X-INT (RND*6)
fffi Como você pode notar, primeiro se'
30 PRINT "O Computador escòlh
eu um numero entre 0 e 5. Ten 10 CLS pergunta ao jogador (linha 90) se ele
te adivinha-lo. 20 LET X-INT<RND(1)*6) quer jogar novamente. Depois, para avi-
40 INPUT G 30 PRINT"0 Computador escolheu sar o computador que espere por uma
S0 CLS um numero entre 0 e 5- Tente a resposta, usa-se a declaração INPUT na
60 IF G-X THEN PRINT "Multo divinhá-lo." linha 100.
bem! 40 INPUT G Mas. desta vez existe uma diferença
70 IF G-X THEN GOTO 90 50 CLS
importante. Depois da linha 20, o joga-
60 IF GOX THEN PRINT "Que 60 IF G-X THEN PRINT "Muito bem
azar - dor deu entrada a um número. Agora
Voce errou!"
90 PRINT "Voce quer tentar ou 70 IF G-X THEN GOTO 90 ele vai entrar um S (para "sim") ou um
tra vez? Se quiser, digit 80 IF GOX THEN PRINT "Que azar N (para "não"), ou seja. uma letra não
- Você errouí um número.
e S e pressione ENTER" e

=
IIIIIIIIIIHHM
Isso significa que, na linha 100, ao in-
MUI
vés de INPUT
PUT
A
você deverá usar IN-
AS. O cifrão (lambem chamado de
"dólar"), designa o chamado siring
(cordão) e AS é uma variável alfanumé-
rica {string variable).
m <
Por que o S é necessário? Para enten-
der isso é preciso conhecer a maneira co-
mo o computador armazena dados e tra-
balha com entradas, o que veremos mais
adiante. Por enquanto, o importante é
lembrar o seguinte: quando o computa-
dor deve esperar um número, você usa
INPUT A, INPUT B, INPUT X ou
my
qualquer outra letra; quando se trata de
uma letra ou palavra, você deve usar IN-
PUT AS. INPUT BS. INPUT XS etc.
A linha 120 foi incluída de forma
que, se o jogador não deseja outra par-
? x ?
tida imediatamente, o computador es-
pera até que ele queira, repetindo o pro-
cesso até que a resposta seja igual a S.
Isto acontece devido ao retomo constan-
te à linha 100 até que a tecla S seja pres-
sionada, quebrando o ciclo.
7x9
6x9
S 63

A função RND tem centenas de usos
5x9 = 454x9 36
cm programação.
plo,
Imagine, por exem-
que você deseje ensinar ao seu fi- 3x SI
=
7"
lho ou irmão a tabuada do nove. Você
poderia fazer o seguinte:
=
18
9*
iDQ
10 PRINT "QUANTO E 1 VEZES 9?"
20 INPUT A
30 IF A-9 THEN PRINT "C0RRET0!"
40 PRINT "QUANTO E 2 VEZES 9?" Digite tudo que vem abaixo apenas
50 INPUT B em maiúsculas, se for usar um compa-
60 IF B = 18 THEN PRINT "CORRETO tível com ZX-81:

Mas, desse jeito, você leria um pro- 10 LET N-INT ÍRNDM2+1)


grama muito longo que não resolveria 20 PRINT "Quanto e ";N;" veze
nem mesmo o problema de como pro- 8 97"
ceder se uma das respostas estiver erra- 30 INPUT A
da! Devemos usar a função RND, en- 40 IF A-N*9 THEN PRINT "Corr
tão, para produzir um programa que se- eto!"
ja mais compacto e faça as perguntas , . , .

corretameme, em sequência aleatória. I m Q 1 1 I

Outra recomendação importante: traba-


10 LET N - INT ( RND (1) « 12
lhe primeiro na parte principal do pro-
grama, deixando os enfeites para de-
+ D Símbolos de computador utilizados i
20 PRINT "QUANTO E " ; N
;

"VEZES
pois. Assim, experimente agora estas li- cálculos de aritmética elementar:
9?"
nhas (lembre-se de digitar o comando 0 asterisco (•), e não o \, é empregadi
30 INPUT A pura indicar multiplicação;
NEW antes!): 40 IF A - N 9 THEN PRINT "C
a barra ( .') significa "dividido por";
ERTO

QD
!

a íleihinhu para cima indica


"elevado à potencia de..." lem alguBj
mi computadores é um sinal circunflexo;
*).
10 LET N-INT(RND(-TIME)*12+1)
20 PRINT "Quanto é ";N;" veze
Km compensação, os •
que uniu .

9 ? as operações de soma
subi ração são seus velhos
30 INPUT A > menos - i ) da
40 IF A-N*9 THEN PRINT "Corre
aritmética elementar,
. "

IIIIIIIIHIHI
Noie a fundão TIMK sondo usada co-
mo argumento da função RND. Este é
um artifício para gerar sempre números
aleatórios diferentes nos micros da linha
MSX, pois TIME informa ao computa-
dor o valor do tempo passado, em se-
gundos, desde que o aparelho foi ligado.
Este programa usa o gerador RND de
forma semelhante à do jogo de adivi-
nhação. Na linha 10, delermina-se uma
variável para o número aleatório que o
computador escolhe. Ela foi chamada
de N, mas poderia ser outra letra ou pa-
lavra, desde que fosse usada sempre da
mesma forma. Na parte direita da linha
10, o programa diz ao computador pa-
ra escolher um número inteiro entre 1
e 12. Nos micros da linha Sinclair, é ne-
cessário somar porque seus números
1 ,

aleatórios começam a partir de zero.


Na linha 20, pede-sc ao jogador que
multiplique por 9 o número que o com-
putador escolheu desta vez. A linha 40
diz ao computador para multiplicar o
número aleatório por 9 e comparar o re-
sultado cor~ a resposta tíada pelo joga-
dor (ou aluno). Se esta estiver correta,
o computador mandará a mensagem de
"CORRETO!" para a tela. Execute o
programa e faça-o rodar várias vezes,
para ver se funciona. Para que ele repi-
ta automaticamente as questões, acres-
cente a linha:

50 GOTO 10

Mas. pensando melhor, por que não


fazemos as coisas de uma forma mais,
elegante, como se segue?

DD
10 PRINT 1

QUAL E O SEU NOME

20 INPUT AS
30 CLS
40 PRINT "OLA. ";A$:PRINT"EU TE
NHO ALGUMAS PERGUNTAS PARA VOCE

50 FOR X-l TO 3000:NEXT X 90 INPUT A


100 IF A-N*9 THEN GOT
60 CLS 110 CLS
que vem abaixo apena
Digite ludo o
maiúsculas, se for usar um compa
120 PRINT A;" 7"
em 130 PRINT "Tente outra
tivel com ZX-81: 140 GOTO 80
10 PRINT "Oi. Qual e aeu nome 150 PRINT "Multo bem,
90 INPUT A ?"
100 IF A=N*9 THEN GOTO 150 INPUT AS
20 íôO^PAUSE 150
110 CLS 30 CLS 170 GOTO 60
120 PRINT A;
n ?" 40 PRINT "Ola. ";AS;".","Eu t
enho algumas perguntas para v
130 PRINT "TENTE OUTRA VEZ
oce . GE El
140 GOTO 80 10 PRINT "Ola. Qual e o aeu
50 PAUSE 200 i

150 PRINT "MUITO BEM. " AS


'

; ;

60 CLS
PRINT"AQUI VAI MAIS UMA:" 70 LET N-INT <RND*12)+1 INPUT AS
160 FOR X-l TO 2000:NEXT X 80 PRINT "Quanto e ";N;" veie HOME
170 GOTO 60 a 97" PRINT "01 " ;AS: PRINT "Eu 1
IHIIIIIIIIII
enho algumas perguntas para voe

50 FOR X = 1 TO 6000: NEXT X


60 HOME
70 LET N - INT { RN D (1) * 10
+ 1)
80 PRINT "Quanto e ";N;" vezes

Muitas vezes, os iniciantes encon


tram dificuldades para interromper un
programa em execução e voltar para ;

110 HOME listagem Isso acontece especialmen


120 PRINT A; "?" tedurante uma série de INPUTs, quan
130 PHINT "Errado. Tente outra do o computador enche a tela de men
sagens, não importa o que você digite
140 GOTO 80 A seguir, abordaremos alguns pe
150 PRINT "Muito bein ";AS: PRI quenos truques que o ajudarão a sair
NT "Aqui vai outra." desses aparentes impasses. Não exis-
160 FOR X - 1 TO 4000: NEXT X i colocados no começo de tem problemas sem solução para
170 GOTO 60 cada linha do programa são muito quem lida com computadores.
importantes. Sem eles, o computador
executará cada linha diretamente
e de forma separada, em w/ de seguir
» programa como um todo. Pressione simultaneamente as te
Mesmo que elas sejam introduzidas cias CONTROL e SPACE (para acionai
20 INPUT AS fora de ordem, o computador as
a função BREAK). Se isso não der «
30 CLS colocará na sequência certa {ou seja,
sultado. é porque o programa está pí
40 PRINT "Olá. *;AS;".","EU ten em urdem ascendente), orientando-se rado numa declaração INPUT. Nest
pelos números de Unha.
ho algumas perguntas para você: caso, se houver aspas na parte de ba
Intervalos entre os números são
xo da tela, use a tecla de recuo do cur-
utilizados para permitir a introdução
50 FOR X-l TO 2500 NEXT X : sor e DELETE, para remover as aspas
60 CLS de nuias linhas, caso isso á esquerda. Depois disso, e se não hou-
70 LET N-INT{RND(-TIME)*12)-t-l seja necessário. ver aspas, pressione as teclas STOP e
80 PRINT "Quanto é ";N:" vezes ENTER, e acione ENTER de novo, para
9?"
90 INPUT A
100 IF A-N-9 THEN GOTO 150
110 CLS
120 PRINT A:"?"
OQ
Pressione a ice la BREAK
listar o progra

130 PRINT "Tente outra vez." Você deve acionar a tecla CTRL,
140 GOTO8B0 manté-la pressionada e, a seguir, pres-
sionar a tecla C Usaremos a notação
150 PRINT "Muito bem, ";AS;"!",
"Aqui vai outra:" CTRL-C para essa operação, assim co
s STOP c ENTER. mo em qualquer outra ocasião em que
160 FOR X-l TO 1500:NEXT X
170 GOTO 60 duas teclas devam ser acionadas simul-

As linhas 30, 60 e 10 evitam que a


!
3MJ taneamente CTRL-C não funcionar ex-
perimente CTRL-RESET. Após obter na
tela o 'J', que é o sinal de prontidão,
leia fique repleta de mensagens do com- Pressione as teclas CONTROL e C, si-
digite LIST.
putador ou de respostas erradas. As li- multaneamente, e depois RETURN.
nhas 50 e 160 Tazem o computador es-
perar algum tempo antes de formular
a próxima pergunta. As declarações
fffi D a tecla BREAK. e d<
FOR. ..NEXT serào explicadas na pró- as teclas CONTROL e STOP pois digit< > comando LIST. Se nã
xima lição de BASIC. simultaneamente. Mudando os noves sssione a tecla RESET n
No programa para o Sinclair, as vir- do programa para cincos, seis ou setes, i do computador.
gulas nas linhas 40 e 1 50 servem para es- você poderá testá-lo com outras ta'
paçar as mensagens na tela. Nos outros das. Será que você conseguiria modifi
programas, as declarações PRINT ex- cai o programa para colocar esses nú
tras fazem o mesmo. Para evitar que o meros como variáveis, que seriam deii
programa seja interminável, faça o se- nidas logo no começo por outra decl;
guinte: ração INPUT?

Especificação de faixas
de números aleatórios
Números aleatórios entre O e 0.9999999
mm
RND II) RND (0) RND
Números aleatórios entre 0 e N " 0.99999999 RND (1|*N RND (0) *N N*RND
Números aleatórios entre -10 e +10 INTIRND (II *211-10 RND (21J-11 INTIRND* 211-10
i Números aleatórios entre 0e 39 INTIRND 111* 401 INTIRND 101*40) INTIRND* 401
Números aleatórios entre 1e 40 INT(RNDI1 1*401+1 RND (401 INTIRND*40I+1
1 APLICAÇÕES 1

A S UA IMPRESSORA
Sí _D]AGRAMA£ÃO_DE UMA CARTA
PADRÃO
_ COMO ENTRA R O PROGRAMA MELHORE SEU TEXTO
APRENDA A ADA PI AH O PROGRAMA IMPRESSÃO DE CÓPIAS

Você comete erros quando escreve


usar com processamento de textos, ia" (dupla sensibilidade de pontos),
pois dispõem de pouquíssimos recur- ou uma impressora (ou máquina de
cartas importantes? Se isso sos para isto. Assim, não apresenta- escrever) acoplada ao compulador,
acontece, aqui está um programa mos aqui uma versão para máquinas usando o sistema de margarida, ou
desse tipo. outro. Essas máquinas são caras, e
que permite produzir cartas Ao contrário de um programa com- nem todo mundo pode tê-!as. Assim,
padronizadas com cópias pleto de processamento de textos, que talvez você possa usar a de um ami-
costuma ser muito complexo e toma- go ou de seu trabalho. As caracterís-
personalizadas para muitas pessoas. ria horas de digitação para ser colo- ticas das impressoras para micros se-
cado no computador, o programa rão discutidas em um artigo poste-
aqui apresentado tem bem menos re-
cursos. Por exemplo, não dá para ver
Escrever um grande número de car- na teia o aspecto final da carta a ser COMO "ENTRAR" 0 PROGRAMA
ias similares (por exemplo, pedidos de impressa. Mas não se preocupe, ele
emprego, cartões de Natal, ele.) é uma não é tão limitado assim: tem recur- O programa consiste de duas parles: o
larefa longa e tediosa, quando reali- sos para evitar a divisão de palavras programa propriamente dito, na primei-
zada manualmenie. ao final de uma linha, inserir uma ra parteda listagem e, o texto da cana, que
O programa apresentado neste arti- linha em branco entre dois parágra- deve ser armazenado no programa, atra-
go resolve num instante esse tipo de fos, etc. vés de uma série de declarações DATA.
problema. Ele é um modelo simplifi- Qualquer tipo de impressora serve Comece digitando o programa princi-
cado de um editor de textos, que per- para produzir as cartas (lembre-se, en- pal, listado a seguir para cada tipo de má-
mite entrar com uma carta padroni- tretanto, que se você usou acentua- quina. Não digite as declarações DATA
zada no computador e produzir, caso ção no texto, ê necessário que a sua presentes no programa. Em seguida, gra-
necessário, cópias ligeiramente diferen- impressora seja capaz de reproduzi- ve o programa assim digitado em fita cas-
tes entre si. Alguns computadores pes- la, o que nem sempre acontece). Se sete ou disquete, usando o comando SA-
soais, comoos da linha MSX, por você quiser uma melhor qualidade de VE (em alguns computadores, esse co-
exemplo, têm recursos para acentua- impressão, como ê o caso de cartas mando chama-se CSAVE): consulte o
ção correia de textos em português, mais "profissionais", vai precisar, evi- manual do computador para ver como
letras minúsculas e maiúsculas no te- dentemente, de uma impressora mais usá-lo. Assim, o programa gravado pode-
clado e na tela, etc. Já os computa- sofisticada (e com fita nova!). Esta rá ser usado para qualquer tipo de carta,
dores compatíveis com a linha Sin- pode ser do tipo matricial, com capa- depois. Se você quiser preservarem a fita
clair ZX-81 são bastante difíceis de cidade de imprimir em "qualidade car- ou disco o programa contendo algum mo-
I APIICAÇÕCS 1

delo particular de carta, grave-o separa- Cada linha da carta deve começar
damente, com outro nome (programa mi com aspas, logo após a declaração
mais dados). Nesse computador não dá para im- DATA. Alguns símbolos de edição po-
Antes de imprimir sua carta, voeè primir a carta primeiro no vídeo, an- dem ser incluídos no texto. Eles têm
deve fazer alguns ajustes, dependendo tes de mandá-la para a impressora, por objetivo orientar a forma estética
da impressora utilizada. a não ser que você modifique todas de impressão. Aqui vai o significado
Em primeiro lugar, verifique quan- as declarações iipo LPRINT existen- de cada símbolo de edição para nos-
tos caracteres por linha sua impresso- tes, para PRINT, e vice-versa. Na li- so programa:
ra aceita (geralmente são 40, 80, 120 nha 10, as variáveis PL e LL devem Aqui vai o significado de cada sím-
caracteres por linha). Então, modifi- ser modificadas conforme a sua im- bolo de edição para nosso programa:
que o programa de forma a seguir pressora (ou, para impressão em ví-
essa largura de linha, permitindo uma deo, para LL = 35 e PL = 40). • O símbolo # significa: "esta li-
margem adequada de ambos os la- nha é parte do meu endereço, coloque-
dos. No programa, a variável TL re- a do lado direito da página".
presenta o comprimento total dispo-
se
nível na impressora, e LL, o compri- Modifique a linha 30 de maneira O cifrão. S, quer dizer: "comece

mento da linha a ser digitada. Assim, que TL e LL contenham as larguras um novo parágrafo, deixando uma li-
você pode alterar os valores atribuí- de linha disponíveis na impressora e nha em branco acima dele".
dos no programa a essas variáveis, an- na carta, respectivamente. Sc voeè qui-
tes de imprimir as cartas. ser ver na tela, primeiro, como sairá • O & comercial (ampersand): "co-
a carta, mude o valor de P para 0, mece uma nova linha na margem es-

u Modifique a linha 20 (ciando a TL


TL e LL para 39.

DIGITE SUA PRIMEIRA CARTA


querda,mas não deixe uma linha em
branco antes" (ele é útil para compor
o endereço do destinatário da carta).
o valor da largura de linha disponível
na impressora) e a linha 30, de modo Sua carta consistirá de uma série • O asterisco (*) significa: "centre
que o valor de LL contenha a largura de declarações DATA, uma linha de esta linha".
da linha da carta. Do jeito que está texto por declaração. Digile-as como
no programa, a linha 40 mostra na mostrado no exemplo na última pági- Se você deseja colocar algumas li-
tela como sairá a carta, antes de im- na deste artigo. nhas em branco indique-as com uma
primi-la. No momento da impressão, As instruções DATA devem come- serie de cifrões entre aspas, um para
modifique a variável P, nessa linha, çar na linha 1000 do programa, e con- cada linha em branco. Quando você
de 0 para 2. ter inicialmente o seu endereço. pri- A atingir o final da carta, os computa-
meira tarefa do programa será procu- dores do tipo abaixo necessitam de
rar a linha mais longa do endereço, uma linha adicionai:
e imprimi-lo à direita do cabeçalho.
Modifique a linha 10 de maneira Depois disso, as declarações DATA de-
que PL seja a largura da impressora, verão conter o texto propriamente di-
e LL, a largura que você deseja para to da carta. O
computador alinhará Entre um número de linha adicional,
a carta (no exemplo dado, essas lar- esse texto junto à margem esquerda seguido por DATA $
guras estão muito pequenas para im- da carta, conforme os padrões mais Entre outra linha adicional, seguida
pressoras mais profissionais). modernos para cartas comerciais. por DATA.
(^Illlllllll 40 P-0 850
MELHORANDO SUA CARTA .
50 SP- (TL-LL) /2 HW-TL/Z : 90 IF AS(C)-"S" THEN L PRINT
60 PHINT |-P,CHHS(13) CHRS 13;CHRS 13:: LET D-0
Visto que ludo está escrito em BA- 900
70 IFP-2 THEN SPS-STRINGS SP GOTO
,
(

SIC, você poderá, se quiser, gravar ") ELSE SP=0:HW=16 95 LET AS-" "+AS: LET L-L+l
novamente o programa, com as decla- 200 READAS:AS-AS+"
"
100 IF AS<C)-" " THEN GOTO
rações DATA incluídas. 210 IF AS-""GOT0 290 800
Posteriormente, se você quiser me- 220 OS-LEFTS(AS,l) 110 LPRINT AS(C)
lhorar a carta, ou produzir uma nova 230 IF OS="l" THEN ML=0:GOSUB 4 115 IF D>LL THEN LET D-0
versão, o primeiro passo será carregar 00: GOTO 290 120 GOTO 50
o programa correspondente, a partir 240 IF OS-"S" THEN RL = 0 PRINTI - : 500 LET NL-0: LET TA-LL: LET
P,CHR$(13) ;CHRS(13) ;SPS; :ST-2 :G BE-0
do disco ou casselc (usando o coman-
OTO 280 510 LET LE-LEN A$-l: IF LE >LL
do LOAD, ou CLOAD, conforme o THEN PRINT FLASH l:"Erro no
250 IF OS-""" GOSUB800:RL=HW-LE
tipo de computador), e editar o pro- formato - Endereco muito gran
NÍAS)/2:G0T0 280
grama usando o editor BASIC da for- 260 IF 0$-"S." THEN RL-0 PRINTt- : de.": STOP
ma habitual. Grave-a novamente, se P,CHRS(13) ;SPS; :ST=2:GOT0 280 520 IF LE>BE THEN LET BE-LE
quiser preservar essas mudanças. Ca- 270 ST-1 530 LET NL-NL+1: READ AS: IF
so contrário, rerá que redigitá-las 280 GOSUB 600 AS(1)- 'I" THEN GOTO 510
-

quando carregar o programa original 290 GOTO 200 540 RESTORE 1000
novamente. 400 IF LEN(AS)>ML THEN ML-LEN (A 550 LET TR-T+LL-BE: FOR G-l TO
S) NL: FOR H-l TO TR LPRINT " "; :

410 N-N+1:PEAD AS:IF LEFTSIAS.l : NEXT H: READ AS: LPRINT AS (2


IMPRIMINDO AS CARTAS )-"|" GOTO 400 TO } NEXT G
:

420 IF ML>LL THEN CLS PRINT "ER : 560 GOTO 30


Para imprimir sua carta basta exe- 700 LET TA- (LL-L) /2+T: IF TA<T
RO NO FORMATO. ENDERECO MUITO L
cutar o programa: ele se encarregará ONGO PARA O TAMANHO DE LINHA THEN PRINT CHRS 13: PRINT
de ativar e desativar a impressora. Se ESCOLHIDO " END .
: FLASH l;"Erro no formato - Nao
você tentar fazer isso sem que a im- 430 RESTOBE: FOR J-0 TO N-l REA : poaso cen-tralizar " STOP .
:

"
pressora esteja conectada (quando eia D AS PRINTI -P STRINGS LL-ML "
: . (
,
710 LPRINT CHRS 13;: FOR n-l
eslá ligada, a luz que indica a cone- );SPS; :PBINT#-P.MID(AS-2) CHRS ; TO ta: LPRINT " ";: NEXT n:
xão eom o computador, normalmente 13) ;
LPRINT AS(2 TO L) GOTO 20 :

rotulada UNHA ou LINE, permane- 440 NEXT RETURN : 800 LET SL-LL-D-1: LET CC-C+1
600 WL-0 LET X-l
ce acesa), o computador ficará para-
610 IF ST+WL>LEN(AS) THEN 630 810 IF CC-L THEN GOTO 825
do, esperando que a impressora entre
620 IF MIDS(AS,ST+WL,1)0" " TH 820 IF AS(CC)<>" " THEN LET
em funcionamento. Neste caso, inter- EN WL=UL+1 :GOTO 610 CC-CC+1 LET X-X+l GOTO 810
: :

rompa a execução do programa, pres- 630 IF WL>LL THEN CLS:PRINT "ER 825 IF X>-LL THEN PRINT CHRS
sionando a tecla BREAK
ou sua equi- RO NO FORMATO. .." AS: PRINT" ... ; 13: PRINT FLASH li "Erro no Fo
valente. A forma de ver a carta no CONTEM UMA PALAVRA GRANDE DEMAI inato - Palavra muito grande."
video, antes de imprimi-la, já foi in- S " END
!
:
; STOP
dicada. 640 IF RL+WL-1>LL THEN PRINT |- 830 IF SL>-X THEN GOTO 110
O tipo de papel a ser usado depen- P,CHRS(13) ;SPS; :RL-0 850 LPRINT CHRS 13:: LET D-0
650 WL-WL+1 900 FOR B-l TO T: LPRINT " ";:
de de sua impressora. Algumas acei-
660 PRINT |-P,MID$tAS,ST,WL) :R : NEXT B: GOTO 50
tam folhas soltas, caso tenham o rolo
compressor de borracha: essas folhas
são melhores para uma correspondên-
cia mais formal. A maioria das im-
L-RL+LEN(MIDS(AS.ST,WL)
670 ST-ST+WL:IF ST<LEN (AS) +1 GO
TO 600
680 RETURN
m
5 CLS
pressoras, entretanto, usa formulário 800 IF LEN (AS) >LL THEN CLSrPRIN 10 LET LL-35 LET PL-40 :

continuo, deslocado pelos picotes na T " ERRO NO FORMATO NAO POSSO . 15 LET LL-LL+1 LET PL- (PL-LC.) /2
:

margem (remalina). Depois de impres- CENTRALIZAR" AS END , : 20 LET D-0


sa a carta, retire as remalinas com 810 PRINT #-P,CHRS(13) 30 READ AS: LET L-LEN (AS)
uma guilhotina ou abrindo os pico- 820 IF HW>LEN(AS)/2 THEN PRINT 40 LET C-0
*-P,STRINGS(HW-LEN(AS)/2," ") 50 IF C-L THEN GOTO 30
tes, acertando com uma tesoura ou ;

830 ST"2 RETURN : 60 LET C-C+1:LET D-D+1:IF C>1 T


lâmina afiada.
HEN GOTO 100
No caso de utilizar papel timbrado, 65 BS-MIDS(A$,C,1)
não é necessário incluir o seu endere- 66 IF BS-'-" THEN STOP
ço na carta. Assim, digite o texto nor- 10 LET LL-32: LET PL-32 70 IF BS-"#" THEN GOTO 500
malmente, começando da linha 1000, 15 LET LL-LL+1: LET T-(PL-LL) 80 IF BS-"*" THEN GOTO 700
mas sem entrar as linhas que come- /2 85 IF BS-"S." THEN GOTO 850
çam por # Para imprimir cópias
. 20 LET D-0 90 IF BS-"S" THEN LPRINT CHRS (
repetidas da mesma carta, execute o 30 READ AS: LET L-LEN AS 3):LPRINT CHRS(13):LET D-0:GOTO
programa novamente, tantas vezes 40 LET C-0 900
forem necessárias. 50 IF C-L THEN GOTO 30 95 LET AS-" "+AS LET L-L+l :
quantas
60 LET C-C+l: LET D-D+l IF C : 100 IF MIDS(AS.C.l)-" " THEN GO
>1 THEN GOTO 100 TO BOO
70 IF AS(C)-"#" THEN GOTO 110 LPRINT MIDS(A$.C. J)
SOO 115 IF D>LL THEN LET D-0
10 CLEAR 200 80 IF AS(C)-"-" THEN GOTO 120 GOTO 50
20 TL-B0 700 500 LET NL-0 LET TA-LL LET BE-0
: :

30 LL-56 85 IF AS(C)-"»." THEN GOTO 510 LET LE-LEN(AS)"1:IF LE>LL T


; ; P : ; ;

I ARUCAÇÕeS I

HEN PHINT "ERRO NO FORMATO - En


dereço muito longo"
520 IF LE>BE THEN L ET BE-LE
530 LET NL"NL+1 READ AS:IF MIDS :

(AS.C.l)-"»" THEN GOTO 510


540 RESTORE 1000
550 LET TR-T+LL-BE:FOR G-l TO N
L FOR H-l TO TR LPRINT " ";:NEX
: :

T H READ AS F-LEN (AS) -1 LPRINT


: : :

RIGHTS (AS F) :NEXT G ,

560 GOTO 30
700 LET TA-(LL-L)/2+T:IF TA<T T
HEN LPRINT CHRS 13) PRINT "ERRO ( :

NO FORMATO - Náo poaac central


i Zar
" STOP :

710 LPRINT CHRS(13):FOR N-l TO


TA LPRINT " " :NEXT N F-LEN (AS)
: ; i

-1: LPRINT RIGBTS (AS F) :GOTO 20 . ;

800 LET SL-LL-D-1:LET CC-C+1:LE


T X-l
810 IF CC-L THEN GOTO 825
820 IF MIDS(AS.CC,1)<>" " THEN
LET CC-CC+1:LET X-X+l :GOTO 810
825 IF X>-LL THEN LPRINT CHRS (1
3) :PHINT "ERRO NO FORMATO - Pai
avra muito grande" STOP :

830 IF SL>-X THEN GOTO 110


850 LPRINT CHHS{13):LET D-0
900 FOR B-l TO T PRINT" ";:NEXT :

B:GOTO 50

HM]
100 HOME
110 ONERR GOTO 430
120 TL - 80:LL - 60:P - 1 : D$ -
CHRS (4)
130 SP - (TL - LL) / 2:HU - TL

PRINT DS "PRI" i ;

160
2)
170
PRINT CHRS (13)
READ AS: AS - AS +

IF AS - "" THEN 160


180 OS -
190
LEFTS (AS.
IF OS - "»" THEN ML
1
OSUB 260: GOTO 250
200 IF OS ' "S" THEN RL
RINT CHRS L3) :'HRS fl3) :

( SP) :ST - 2: GOTO 240


;

240
220 IF OS - "i"
RINT CHRS (13)
2: GOTO 240
230 ST - 1
240 GOSUB 310
250 GOTO 160 370 PRINT MIDS (AS.ST.WL) ; :RL
260 IF LEN (AS) > ML THEN ML LEN (AS) THE - RL + LEN MIDS (AS.ST.WL))
(

- LEN (AS) 380 ST - ST + WL: IF ST < LEN


270 N - N + 1: READ AS IF LEF I
(AS) + 1 THEN 310
TS (AS.l) - "*" THEN 260 390 RETURN
280 IF ML > LL THEN PRINT DS 20 400 IF LEN (AS) > LL THEN PR
"PRI0": HOME PRINT PRINT "E : : 340 IF WL > LL THEN PRINT DS INT DS;"PRI0": HOME PRINT "ER
:

RRO DE FORMATO! O ENDERECO" PR ; "PR»0": HOME PRINT "ERRO DE F


: RO DE FORMATO! NAO SE PODE CENT
INT "E MUITO LONGO PARA O TAMAN ORMATO! ": PRINT AS;"--. CONTEM RALI ZAR "[AS: END
HO DA LINHA" CND : UMA PALAVRA MAIOR QUE A LINHA! 410 PRINT CHRS (13);
290 RESTORE FOR J 1 TO N :
": END 420 IF HW > LEN (AS) / 2 THEN
READ AS: PRINT SPC LL - ML + ( 350 IF RL + WL - 1 > LL THEN PRINT SPC( HW - LEN (AS) /
SP t 1 RIGHTS (AS. LEN (AS) -
) ; PRINT CHRS (13); SPC SP);:RL
( 2) :ST - 2: RETURN
1) CHRS (13)
;
- 0 430 PRINT :PRINT DS;"PR#0": E
300 NEXT RETURN : 360 WL - WL + 1 ND
IIIIIIIIIHHH^HMHHHHHIIIIIIIII
DESENHE NÚMEROS COM LAÇOS
FOR... NEXT
0 NASCER E 0 PÔR-DO-SOL NO
APRENDA A CRIAR EFEITOS HORIZONTE DO VÍDEO
LACO! SONOROS CALEIDOSCÓPIOS
1

Ill III I
O QUE £ UM LAÇO FOR... NEXT O computador não se atrapalha com
o fato de que 30 não se divide em um
Um laço FOR... NEXT em BASIC número exato de passos, como você pe-
é um mecanismo que faz com que o diu. Ele vai o mais perto que pode e en-
computador repila uma mesma opera- tão pára.
ção certo número de vezes. O número de linhas entre o FOR e o
Suponha, por exemplo, que você qui- NEXT tampouco o preocupa. Você po-
sesse saber as raízes quadradas de todos de colocar o FOR na linha 10 e o NEXT
os números de 1 a 100. Você poderia di- na 90 — ou mesmo 9000 — que ele não
zer ao computador: se esquecerá delas. Lembre-se, porém,
de que o computador executará as linhas
PRINT SQR(l) do laço a cada passagem.
PRINT SQB(2)
PRINT SÇjR (3)
COMO RETARDAR A ACA0
... e assim por diante.
E a cada pergunta o computador da- O laço FOR... NEXT tem dezenas de
ria a resposta. Mas, além de impor um usos em programação. A mais simples
enorme trabalho de digitação aos seus delas é gastar tempo.
dedos, esta não é uma técnica particu- Se você rever a seção Você sabe ta-
larmente eficiente de uso do computa- buada? na primeira lição de BASIC, en-
dor. Tente assim: contrará um b"om exemplo. Nesse caso,
tudo o que acontece entre cada FOR e
o seu NEXT
é que o computador "con-
ta" um número. Essa contagem é mui-
10 FOR N-l TO 100 to rápida (o tempo exato pode ser da or-
20 PRINT N,SÇjR(N) dem de centésimos ou milésimos de se-
30 NEXT N gundo). Mas, enquanto espera que ele
40 PRINT "E ACABOU." come até 1000, você terá uma pausa bem
Esse programa faz com que o com- perceptível. E se você executar:
putador imprima e sua raiz quadrada,1

2 e sua raiz quadrada, 3 e sua raiz qua-


drada... e assim sucessivamente até atin-
gir 100, no momento em que o apare-
lho pára.
Como ele faz isto? Quando o com-
putador encontra um FOR, "sabe" que
as linhas seguintes serão repetidas. As-
sim, ele as executa até encontrar o
NEXT, volta à linha da instrução FOR Programadores de jogos frequente-
e repete o processo. mente tornam essas pausas menos can-
Enquanto trabalha, o computador sativas, inserindo nelas algumas notas
também está contando. primeira vez A musicais. Tente este exemplo:
em que passa pela linha 20 ele calcula
a raizquadrada de na segunda, a de l ,

2, e assim por diante.


Quando tiver trabalhado com o 10 FOR 1-255 TO 155 STEP
maior número da instrução FOR, ele 20 SOUND I ,

deixará automaticamente o laço e con- 30 NEXT I


tinuará a execução do programa pela
instrução seguinte ao N EXT no nos- —
so caso o PRINT da linha 40.
10 FOR n-29 TO 10 STEP
20 SOUND .015,n O Apple II padrão não têm coman
30 NEXT n dos intrínsecos para a produção de efei
tos sonoros. Desse modo, o efeito con
Ao executar um laço FOR... NEXT, seguido é apenas uma série de cliques
o computador pode contar em unidades Já o TK-2000 tem o comando SOUND.
diferentes de 1 Para isso, usamos a de-
.
5 SOUND 7,56:SOUND 8,15 Para rodar o programa acima no
claração STEP (isto é "passo" ou "de- 10 FOR I-2S5 TO 0 STEP -
TK-2000, substitua as linhas 10 e 20
grau") junto com a declaração FOR. 20 SOUND 0,1 assim:
Veja o exemplo: 30 NEXT I

10 FOR»N-l TO 30 STEP 2.7 FORN-l TO 100 Este é um exemplo do efeito de som


I 20 PRINT N SOB (N) , PRINT PEEK - 16336).
{ que os programadores usam em jogos
| 30 NEXT N NEXT N para dizer "Você falhou" ou "O alie-
Os comandos ou palavras-chave em
BASIC, tal como PRINT, GOTO,
STEP, etc. precisam ser digitados
sempre em letras maiúsculas?
Sim, quase sempre. É preciso con-
siderar, no entanto, as especificidades
das diversas linhas. Alguns computa-
dores, como os compatíveis com o
ZX-81 e o Sinclair Spectrum não dei-
xam margem a dúvidas, pois as pala-
vras-chave são entradas por inteiro, em
maiúsculas, ao se pressionar a tecla
correspondente.
Outros computadores, como os
compatíveis com a linha TK-2000 e os
Apple e Apple Plus, não tém minús-
II II

culas le nem aceitam comandos que


não sejam em maiúsculas, caso você
tenha essa opção em sua máquina).
Finalmente, os compatíveis com as
imhas MSX e TBS-80 aceitam coman-
dos em minúsculas, mas convertem in-
ternamente para maiúsculas todos os
comandos em BASIC.

0 PRINT AT i

60 GOTO 10

10 SCREEN 3
20 R-RND(-TIME)
30 FOR N-0 TO 191 STEP
40 LET M-RND(1)*255
50 LET C-RND(1)*15
60 PSET(M.N) ,C
70 NEXT N
10 GOTO 30

5 GR
10 FOR N - 0 TO 39
20 LET M - RND (1) * 40
30 COLOR- RND (1) * 15
nigena aierrisou". Ao mesmo tempo, 40 PLOT M.N
quando se faz uma contagem regressi- 50 NEXT N
va, a declaração STEP exislenle no la- 60 GOTO 10
7 CLS 0
ço FOR... NEXT
deve ser seguida dc 10 FOR N-0 TO 63
um número negativo, desiinado a dimi- 20 LET M=RND(32) -1 A do desenho
linha 10 define a altura
30 LET C=RND(9>-1 que será colocado no video e diz ao
40 SET (N,M.C) computador para imprimi-lo linha por
50 NEXT N linha.
PINTANDO 0 SETE E OUTROS NÚMEROS
60 GOTO 10 A linha 20 define a largura e, soma-
Apenas por divertimento —
e valio- da à linha 40, ordena ao computador
sa experiência em programação você — que imprima pequenos quadrados alea-
pode usar laços FOR... NEXT para 10 FOR n-0 TO 21 toriamente naquela largura disponível.
criar variedades de efeiíos gráficos. 20 LET m=RND*31 A linha 30 escolhe, ao acaso, as co-
Aqui está uma amostra: 30 INK RND*7+1 res dos quadradinhos.
1IIIIIIMHH lllllllll

VARIAÇÕES SOBRE UM MESMO TEMA 9 CLSO


10 FOR N-l TO 60
20 FOR M=0 TO 31
Experimentar variações desse lema de O TRS-80 comum e seus compatíveis 30 LET ORND(9)-l
elaboração de gráficos vai ajudá-lo a se não selecionam a cor do ponto gráfico; 40 SET (N,M,C)
familiarizar com laços FOR... NF.XT e por isso o programa não tem muita gra- 45 NEXT M
com a função RNI). ça. Sc você quiser ver como é. substitua 50 NEXT N
Aqui lemos mais duas para cada má- na versão abaixa a linha 40 e retire a li- 60 GOTO 10
quina. Não se esqueça de digiiar o co- nha 30l Tei
mando NEW entre elas, para evitar que
os programas se misturem. 10 SET (N M)
,

8 CLSO
10 LET N-RNDÍ60)
20 FOR M-0 TO 31
30 LET ORND{9)-l
40 SET (N.M.C)
15 NEXT t

60 GOTO 10

10 FOR n-0 TO 21
20 FOR n>-0 TO 31
30 INK RND*7+1
40 PRINT at n,m :

"i
45 NEXT m
50 NEXT n
60 GOTO 10

Da mesma forma, o ZX-81 não tem


cor. Para rodar o programa, retire a li-

nha 30 e use apenas letras minúsculas,


quando digitá-lo.
Para o TK-90X, tente ainda a seguin-
te variação do programa. O que acon-
tece de diferente?
IIIIIIIIIIIHHH PlOGlAMAÇAOSASiC 1 Hlllllll

Pur-do-sol, df autoria do laço FOR... NEXT para e TK-2000

20 R-RND -TIME)
(
que irradiam desse foco.
30 FOR N-0 TO 191 STEP 4 A segunda parle desenha uma série
40 FOR M-0 TO 255 STEP 4 de linhas na metade inferior do vídeo, 20 SCREEN 2
50 LET C-HND(1)*15 30 CLS
parlindo de pontos fixos no "horizon-
60 PSET(M.N) .C 40 COLOR 11
65 NEXT M
te". Isso cria um belo efeito de perspec-
50 R-RND(-TIME)
70 NEXT N tivaque pode ser aproveitado cm pro-
60 FOR N-l TO 80
80 GOTO 30 gramas futuros.
70 LINE (127.95)-(256-RND{l)
6,96-RND(l)"96)
HE
10 GR 20 PMODE 3 ,
80 NEXT N
90 COLOR 6
100 FOR N-95 TO 191 STEP 12
LET N - RN D (1) * 40 30 PCLS 3 110 LINE (127,95}-(0,N>
20
30 FOR M - 0 TO 39 40 COLOR 2 120 LINE (127,95)-[255,NÍ
40 COLOR- RN D (1) * 15
50 SCREEN 1,0 130 NEXT N
PLOT M.N 60 FOH N-l TO 80 140 FOR N-0 TO 255 STEP 10
50
NEXT «
70 LINEU27,95)-(256-RND(256) ,9 150 LINE (127,95)-(N,191)
60
80 GOTO 20 6-RNDI96) ) , PSET 160 NEXT N
80 NEXT N 170 GOTO 170
Antes de ir adiante, aqui esta uma pe- 90 COLOR 4
100 FOR N-95 TO 191 STEP 12
quena experiência que você deveria ten-
tar —apenas no TK90X e no CP400.
110 LINE (127, 95)-(0. N] PSET , 3] 53
120 LINE (127, 95)- (255, N) .PSET 10 HGR
Apague a linha 45 dos dois primeiros 130 NEXT N
programas e rode-os novamente com a 20 HCOLOR- 5
140 FOR N=0 TO 255 STEP 10 30 FOR I - 1 TO 80
seguinte modificação: 150 L INE 127 95 - (N 191 ) PSET
)
( , . ,

40 HPLOT 139,79 TO RN D (1) *


160 NEXT N 279, RND (1) * 79
170 GOTO 170 50 NEXT I
60 HCOLOR- 6
55 NEXT M 70 FOR I - 79 TO 159 STEP 10
60 HPLOT 139.79 TO 0,1
Você descobriu mais iaracteris- 5 BORDER 0: PAPER 0: INK 6: 90 HPLOT 139. 79 TO 279,
nportante dos laços FOR... CLS 100 NEXT I
10 FOR n-l TO 80 110 FOR I - 0 TO 279 STEP 20
NEXT: quando sc tem dois ou mais la-
20 PLOT 127.75
ços nomesmo programa, estes devem fi- 120 HPLOT 139,79 TO 1,159
30 DRAM INT (RND*250) - 1 25 INT .
130 NEXT I
carou "aninhados" um no outro ou se- (RND*97)
parados. Sc eles se cruzam, o programa 40 NEXT n
não funciona. 45 INK 5
50 FOR n-75 TO 0 STEP -15
60 PLOT 127,75 Finalmente, temos um programa es-
70 DRAU -127, -n: PLOT 127,75: petacular que funciona em quatro de
DRAW 12 7, -n nossas máquinas.
Este programa usa um laço FOR...
NEXT para criar um padrão dc "pôr-
do-sol". A primeira parte do programa
define um ponto no meio da tela. Em
80
100
110
120
NEXT n
FOR n--127 TO 127 STEP 20
PLOT 127,75
DRAW n.-75
D
seguida, ele desenha linhas luminosas 130 NEXT n
mu

No TK-80X o Caleidoscópio e mais grus.se

9 SCREEN 1,0 você pode criar centenas de padrões di-


10 FOR L-0 TO 255 STEP 2 ferentes, um verdadeiro caleidoscópio
15 COLOR RND (4)
de formas e cores.
20 LINE[0,0)-(L,191) PSET ,

30 LINE <255,0)-(255-L.191) ,PSE Ao fazer tudo isso, você não estará


só criando belas imagens no vídeo. Vo-
3 R-RND -TIME [
)
cê estará também se familiarizando com
6 CLS uma das mais úteis "ferramentas" do
9 SCREEN 2
programador.
10 FOR L-0 TO 255 STEP 2
15 COLOR RND (1) *15
20 LINE (0,0)-(L,191)
30 LINE (255,0)-(255-L.191)
40 LINE (0, 191) - (L,0)
50 LINE (255,191)-(255-L.O)
10 FOR n=0 TO 255 STEP 3 60 NEXT L
15 INK RND* 70 GOTO 10
20 PLOT 0,0: DRAW n.175
30 PLOT 255,0: DRAW -n.175
40 PLOT 0.175: DRAW n,~175
50 PLOT 255,175: DRAW -11,-175 10 HGR Como devo proceder para manter
20 FOR N - 0 TO 279 STEP 5 um registro de todas as variáveis usa-
30 HCOLOR- RND (1) * 6 + 1 das em meus programas, sem me per-
40 HPLOT 0,0 TO N, 159 der entre tantos Xs e Ys?
50 HPLOT 279,0 TO 279 - N.159 Uma forma de evitar o uso desorde-
60 HPLOT 0,159 TO N,0 nado de variáveis em um programa é
70 HPLOT 279,159 TO 279 - N,0 dar-lhes nomes que lembrem o que elas
80 NEXT N representam (nomes mnemónicos). Por
90 GOTO 20 exemplo, se uma variável é usada pa-
USE O LAÇO CERTO ra armazenar o número de espaçona-
Existem muitas oportunidade Cada um dos qualro segmemos des- ves abatidas em um jogo, podemos
usar os comandos FOR... NEXT ses padrões começa com um ponto em "batizá-la" de NAVES,
ços. mas também mui um eanlo do vídeo. O que o laço FOR... É fácil manter um registro de variá-
ue você não deve empregá-los. NEXT faz é contar até o outro lado do veis num programa curto. No caso de
Quando você quiser, por exemplo, vídeo, enqiianio um padrão de linhas é programas mais longos, convém expli-
forçar o programa a realizar um núme- citar mais claramente certas funções.
desenhado cnlre os dois pomos criados
fixo de repetições, sem interrupção Assim, utilize FOR LINHA = ... e FOR
dessa forma.
n quaisquer fases do processamen COLUNA - ... (se você estiver colo
use um laço FOR... NEXT
,
A explicação exala de como os grá- cando coisas na telal em vez de FOR
Em contrapartida, se você quiser ficos funcionam está em um capítulo X - ... e FOR Y = ...
ie uma sequencia de programa seja posterior, mas apague as linhas 30 e 40 Alguns computadores, como o
executada até que uma determinada e você lerá uma idéia geral do que TRS-80 e o Apple If, reconhecem ape-
condição seja atingida, para em segui- acontece. nas as duas primeiras letras de uma va-
da "sair" de dentro do laço, use uma Você pode experimentar, ainda, di- riável, descartando as demais. Neste
declaração diferente, no lugar de caso, lente utilizar iniciais que funcio
giiando algumas das linhas responsáveis
FOR... NEXT, O comando mais reco- nem como abreviaturas adequadas, co-
pelo desenho, variando as cores, mu-
mendável em casos assim é o GOTO, mo T para "tempo", RC para "recor-
em BASIC. dando os STFP na linha 10 e excluin- de", L para "linha", e assim por diante.
do o GOTO
na linha final. Em minuios
COMO O COMPUTADOR É CAPAZ
DE REPETIR TRECHOS DE UM PROGRAMA
omando) IF. da, a cada repetição do laço, essa va-
capacidade de repetir deforma
i
t

controlada o mesmo trecho de um Dessa forma, a programação dire- riável é incrementada, somando-se o
programa pode ser encontrada em io- ta de repetições exemplifica de mo- número 1 ao valor anterior (este nú-
das as linguagens de programação. do mais claro e objelivo a maneira mero corresponde, no caso, ao valor
No BASIC, a programação de laços que o computador usa, internamen- STEP no comando FOR;. Finalmen-
para repetir trechos de um te, uma linha adicional do programa
é muito facilitada pelos comandos te,
programa. deve de N é maior
testar se esse-Malor
FOR, 5TEP e NEXT, explicados nes-
ta lição; porém eles não são es- Suponhamos que o programador do que 10. Se não for, o laço será re-
queira imprimir dez vezes a mesma petido por meio de um comando GO-
senciais.
Ê possível programar laços de re- mensagem na tela, usando o coman- TO e enviará o programa para Irás.
petição de outro modo, simplesmen- do PRINT. Inicialmente, é preciso Se for maior do que 10, o programa
definir e igualar a 0 uma variável con- terminará ou prosseguirá para outro
te usando-se uma variável contado-
ra c uma tinha com a declaração (ou tadora (por exemplo, NA Em segui- trecho.
Illllll Illllll '(

Os videogames para microcomputa-


dores,como o Sjpece Invaders, não le-
n nenhuma graça se a movimentação
e os disparos do canhão laser não pu-
dessem ser controlados pelo jogador si-
multaneamente com o desenrolar do jo-
go. Esse tipo de controle através do te-
clado ou do joyslkk é uma característi-
ca de iodos os jogos de açào, mesmo os
mais simples.
O elemento mais importante dessa
técnica de programação é como fazer
! o computador perceba auto- o mesmo método para detectar se uma
maticamente quando uma tecla qual- Mas, como os co-
tecla foi pressionada.
quer é pressionada, sem que seja neces- mandos do BASIC para essa função não
sário acionar todas as vezes as teclas foram padronizados, há uma grande va-
<ENTER> ou < RETURN > Feito
. riabilidade enire os diversos tipos de tecla foi pressionada ehama-se 1NKEYS.
isso, o programa pode tomar decisões computadores. Ao encontrar essa função em um pro-
sobre que gráfico animar, que "disco grama, o computador executa uma
voador" destruir, etc. Outro aspecto es-
sencial é que, enquanto o jogador não
acionar os controles de jogo, o compu-
QQ!Para a maioria dos computadores
"varredura" do teclado, para ver se al-
guma passou do estado de desligada pa-
ra ligada, e retorna o caractere ao pro-
tador poderá se dedicar à movimenta- que utilizam o interpretador da lingua- grama alravés da função INKEVS. Se
ção contínua de gráficos e figuras sobre gem Microsoft BASIC (adoiada nos mi- nada foi pressionado, a função volta
a tela, usando as técnicas aprendidas na cros da linha TRS-80, Sinclair e MSX), com um valor "vazio".
I última lição de programação de jogos. a função utilizada para detectar se uma Por exemplo:
' "

... 1 PROGRAMAÇÃO Dl JOGOS

APRENDA A DETECTAR SE CONSTRUA BLOCOS GRÁFICOS


UMA TECLA FOI PRESSIONADA UcoInUM U IIMIIvllOU
DISPARE SEU MÍSSIL BASES DE MÍSSEIS
COMO CONTROLAR UMA A AUTO-REPETICAO
FIGURA EM MOVIMENTO COMO MONTAR ALVOS MÓVEIS

Execute o programa e pressione qual- INKEYSé iguala "D" ou a "d". Senão


quer (ecla, à exceção de <CAPS for, o programa para os micros da linha
SHIFT> ou < SYMBOL SHIFT 1> Sinclair,que não têm a declaração EL-
(nos Sinclair), < BREAK > ou SE, vão ignorar a linha 40 e passar pa
<SH1FT> (nos TRS-80) ou <CTRL ra a linha 50. Qualquer outra tecla di
STOP> ou < SHIFT > (no MSX). O ferente de "D" mostrará, quando pres-
computador vai exibir um "grito de sionada, a segunda mensagem de "rea-
dor" no meio da tela. O programa fun- ção emocional". Nos micros de outras
ciona da seguinte maneira: linhas, o IF... THEN. ..ELSE permite
A linha 20 limpa a tela. A linha 30 programar em uma única linha as duas
faz com que o computador espere até alternativas.
que uma tecla seja acionada para conti- Existem mais duas exigências impor-
nuar o programa. Note que não há es- tantes nesse programa. A primeira é que
paços entre as aspas. Por causa disto, o "D" ou "d" precisa estar entre aspas,
a linha 30 quer dizer: "Se ou o computador o interpretará como
INKEYS = nada, ou se nenhuma tecla uma variável. A segunda vale apenas pa-
está sendo pressionada, cheque nova- ra o TK-90X: nessa linha de micros,
mente". É muito importante ter o deve-se usar um "d" minúsculo: caso
IF...THEN GOTO 30 porque de outra contrário você deve pressionar < CAPS
forma o computador verificaria apenas SHIFT> e "d" para que o programa
uma vez o teclado e só por uma fração funcione.
de segundo. Tanto nesse programa quanto no an-
Assim que uma tecla é acionada, terior é possível notar que todos os com-
INKEYSé igualado à tecla. Por exem- putadores utilizam exatamente a mesma
plo, se "3" é pressionado, então técnica de investigação do teclado. Ape-
INKEYS = "3". Isso basta para que a nas a maneira de colocar uma mensa-
linha 40 imprima "AÍ!" na tela. gem no meio da tela c diferente para ca-
Na maioria dos jogos você deve pres- da um.
sionar uma tecla para mover um tanque,
uma míssil, etc. Se você mudar a linha
40, verá como isto é feito (no TK-85 use
um "D" maiúsculo): Agora você verá que a partir da de-

DQ
40 IF AS-"
tecção do pressionamento de uma tecla
usando o IF INKEYS = "tecla" é mui-
to fácil disparar um míssil ou mover
uma base de fogueies. Este programa
UM, ISSO E dispara um míssil de uma base quando
9, "OPA !

a tecla "F" é acionada:

QQ
20 CLS 40 IF INKEY$-"d" 1

20 CLS
30 LET AS-INKEYS:IF AS-" AT 11,9; "Hum. ias
GOTO 30
30 PRINT ê397,"Mt"
STOP 40 LET K$-INKEY$:IF KS-" "THEN G
40 PRINT 6269, "OPA!" 50 PRINT AT 11,14 OTO 40
50 IF K$-"F" THEN LET M-334 ELS
E GOTO 40
60 PRINT 6M, " I
20 CLS 20 CLS 70 PRINT 6M+32. " "
"
30 IF INKEYS" " THEN 30 LET AS-INKEYS:IF AS-"" THEN 80 LET M-M-32
40 PRINT AT 11 , L4
;
"Al GOTO 30 90 IF M>0 THEN GOTO 60
40 IF A$-'D" OR AS-"d" THEN LOC 100 GOTO 20
ATE 10,11:PRINT "idm... íbbo é
bom " END
!
:

20 CLS 50 LOCATE 1S,11:PRINT "Ui I"


30 LET A$-INKEYS:IF AS-
GOTO 30 A linha 40 agora verifica se a tecla
""
40 LOCATE 18.11:PRINT "I "D" foi pressionada, ou seja, se 30 KS=INKEYS GOTO 30
IIIIIIIIIIIHI * PKOGRAMAÇÂODEJOGOS 2 ]|||||||||||||
40 IF K-T- THEN M=374
GOTO 30
50 PRINT eM.CHRS(94);
60 PRINT eM+64. " " :

70 M-M-64
80 IF M>0 GOTO 50
90 GOTO 10

Para rodar também no ZX-81, digi-


te o programa abaixo apenas com letras
maiúsculas:
20 CLS
30 PRINT AT 21,14;" dh
40 IF INKEY$="" THEN GOTO 40
50 IF INKEYS<>"E" THEN GOTO 40
55 LET y-20
"
60 PRINT AT y . 1 5 ;
"
I
70 LET y-y-1
75 PAUSE 1
80 PRINT AT y + 1 15 " " ,
;

90 IF Y>0 THEN GOTO 60

20 CLS
30 LOCATE 17.20:PRINT " Jb "
40 LET KS e INKEYS IF KS-"" THEN:

GOTO 40
50 IF KS-"F" OR KS-"f" THEN LET
M-20 ELSE GOTO 40
60 LOCATE 18,11: PRINT" "
"
70 LOCATE íe.M+liPRINT "
80 LET M-M-l
90 IF M>0 THEN GOTO 60
100 GOTO 20

A linha 30 imprime uma base de mís-


seisFormada de três símbolos (no Sin-
no MSX, três símbolos gráficos),
clair e
na parte mais baixa da tela (última
linha).
Na linha 40, LET K$ = INKEYS é
muito importante, visto que você quer
checar se a tecla foi pressionada várias
vezes durante o programa. Esta não fun-
cionaria sem essa declaração. compu- O
tador se recorda do valor de
INKEYS apenas por uma f ração de se-
gundo e, se você não checar
INKEYS suficientemente rápido, ele po-
de esquecer que a tecla foi pressionada.
Mas, vocc pode lambem fazer com
que ele se lembre do que foi teclado dan-
do um nome, K$, à tecla que foi pres-
sionada e checando mais tarde (versão
para a linha TRS), ou dando um novo
comando INKEYS.
A linha 50 verifica se "F" foi pres-
sionado. Se não, o programa volta à li-
nha 40 e continua a varrer o teclado.
"M" é a posição do míssil depois de ter
sido disparado.
A linha 60 imprime o míssil na leia
e a linha 70 se encarrega de apagá-lo de
I suas posições anteriores.
[ A linha 80 faz o míssil se deslocar pa-
2 PROGRAMAÇÃO Dl JOGOS 2

ra cima na teia, e a linha 90 evita que 70 IF KS-"D" THEN LET P=P+l:GOT


o computador tente imprimir o míssil O 90
80 GOTO 50
numa posição fora do vídeo, o que pro- 90 IF P<384 OR PM11 THEN GOTO
vocaria uma mensagem de erro. A pri- 50
meira posição de leia tem o número 0, 100 GOTO 40
e o computador não pode imprimir na-
da em uma posição de número menor A linha 30 determina a posição ini-
que 0. Quando M
= 0 o programa é rei- cialda base, e a linha 40 coloca o míssil
niciado. Atécnica a ser utilizada para naquela posição. Posso escolher qualquer tecla para
A linha 50 verifica o teclado, fazen- operar os controles de um jogo no mi-
fazer o míssil subir vai depender, ago-
do o computador esperar até que uma crocomputador?
ra, do formato da tela do computador
Sim. Tudo o que você tem a fazer
utilizado. tecla seja pressionada.
é mudar os caracteres nas linhas do
A linha 60 investiga se "L" foí pres-
DQ A linha 80 subtrai um número cons-
sionado. Se foi, ela move a base uma
posição para a esquerda, subtraindo I
do número que determina a posição da
programa que testam qual foi a
pressionada e detectada por INKEYS.
Mas cuidado; o que parece ser bastan-
te lógico na teoria às vezes funciona
tecla

base. A linha 70 confere se "R" foi mal na prática. Por exemplo, usar as te-
tante N da posição anterior do míssil
pressionado e nesse caso muda a posi- clas E, D, C, B para representar esquer-
(variável M), de maneira que ele avan-
ção da base adicionando 1 à coordena- da, direita, em cima e embaixo, dificul-
ça uma linha em direção ao topo da te- ta as ações do jogador. Por isso,
da. A linha 90, finalmente, verifica se
la a cada vez que é impresso. Esse nú- costumam-se usar as teclas de movi-
o programa está dizendo ao computa-
mero vale 32 para os micros compatíveis
com o TRS-Color, pois há 32 colunas dor para colocar a base fora da tela — mentação do cursor, principalmente
nos computadores onde elas estão
na tela do computador. Já para o
em caso afirmativo, o programa retor- aglomeradas no mesmo ponto do tecla-
na à linha 50. do, ou presentes em pares complemen-
TRS-80, o número é 64.

A
linha 80 subtrai da posição ante-
1
D
20 CLS
tares. Outra dica é usar A e Z, para mo-
vimentar para cima e para baixo, e K
e L para direita e para esquerda, pois
ocupam posições opostas no teclado.
30 P=797 Já a barra de espaços é muito boa pa-
rior do míssil, pois o comando de posi-
40 PRINTeP,CHRS(32)+CHRS!184)+ ra efetuar disparos, pois o polegar po-
cionamento utilizado, o PRINT AT, CHRSU91)+CHRS(180)+CHR$<32)
identifica as coordenadas (linha, colu- 50 KS= INKEYS IF KS="" GOTO 50
:

na) onde serão exibidos os gráficos. As- 60 IF K5="L" THEN P = P-1 150 IF X<1 OR X>29 THEN LET x
sim, a coluna é mantida constante, pa- 70 IF KS="R" THEN P=P+1 -lx
ra o míssil subir "reto", na coluna 15. BO GOTO 50 160 IF y<l OR y>20 THEN LET Y
e o que varia è Y, ou a altura dele (lem- 90 IF P<767 OR P>828 GOTO 50 -lY
bre-se de que Y = 0 está no topo da te- 100 GOTO 40 170 GOTO 60
la, e não embaixo.
O
programa para o TRS-80 funcio-
na de modo idêntico ao programa para linhas 40 e 50 esiabeleeem a posi-
As
o TRS-Color. Note que os caracteres ção inicial da base de mísseis, na 13." li-
O comando dc posicionamento é o gráficos têm símbolos diferentes, bem nha da (ela, e quinze espaços á esquer-
LOCATK, que dá as coordenadas para como as coordenadas de posicionamen- da. A linha 60 mostra a base na tela.
posicionamento. A linha 80 tem por to dos comandos PRINT f A linha 70 faz o computador esperar
função diminuir em 1 o valor anterior até que alguma tecla seja impressa. Se
do míssil (variável M), para que ele se foi, a base é movida.

desloque para cima, na mesma coluna As linhas 80 e 90 "perseguem" a ba-


(constante 18). Para rodar também no ZX-81, digi- se de mísseis em movimento, colocan-
te o programa abaixo apenas com letras do três espaços em branco sobre sua úl-
MOVIMENTOS SOBRE A TELA maiúsculas. Além disso, ponha os co- lima localização; de modo a apagá-la.
mandos LET da linha 80 em duas linhas Como a linha 60 está deniro do laço de
Da forma que está, o programa da separadas. repetição e sempre vem antes da linha
base de mísseis é bastante limitado pa- 90, a base c sempre impressa em sua no-
30 CLS va posição antes que a posição antiga se-
raum jogo de "artilharia", mas, impri- 40 LET x-15
mindo movimento lateral à base conse- ja apagada.
50 LET y-13
guiremos melhorá-lo um pouco. Veja- 60 PRINT AT y.x;" <*< " A
linha 100 termina o programa se
mos como fazer 70
"
IF INKEYS" " THEN GOTO 70 a letra Q
(de quit, em inglês, que signi-
80 LET lx-x: LET ly-v fica abandone) for pressionada.
90 PRINT AT ly,lx;" A
linha 10, por sua vez, verifica se
1

100 IF INKEYS="q" THEN STOP a tecla "W" foi aeionada, subtraindo


20 CLS 110 IF INKEYS-"w" THEN LET y- 1 do valor de "Y" em caso afirmativo.

30 LET P-397 O efeito disso é a movimentação da ba-


40 PRINT @P .CHRS C 143) +CHRS (140) IF INKEY$-"z" THEN LET y-
se uma linha para cima.
+-CHRS (128) +CHRS (140) +CHRS (143)
INKEY$-"a" THEN LET X- As linhas 120 a 140 operam de for-
50 LET KS-INKEY$:IF KS=" " THEN IF
GOTO 50
ma similar. A linha 20 move a base pa-
1

60 IF K$-"E" THEN LET P-P-l:GOT IF INKEYS-"s" THEN LET x- ra baixo se "Z" é pressionado.
O 90 A
linha 130, move para a esquerda,
; i ; :

IIIIIIIIIMim 2 PIOGIAMAÇÃODIJOGOS 2 f llllllllll


caso "A"
seja acionado, e a 140 para nha 80). e apaea a base nessa posição, 100 IF PEEK (14344) 00 THEN PO =
a direita, ao se pressionar ",S". linha A por meio da linha 90. PO-1
150 evita que a base seja colocada fora As linhas 100 a 140 detectam se a te- 110 IF PEEK(14368)<>0 THEN PO=
PO+1
das laterais da tela. cla apertada foi uma das seguintes: fle-
120 IF PO<767 OR PO>B28 THEN
A impede que a base saia
linha 160 cha para cima, flecha para baixo, flecha PO=LP
por cima ou por baixo da tela. Neste ca- para esquerda c flexa para direita (teclas 130 KS-INKEYS
so, fazer V = LY resolve o problema. A de controle do cursor), que são identi- 140 IF KS="F" THEN M=PO-62 ELSE
linha 170 fecha o laço, reiniciando to- ficadas pelos seus códigos respectivos GOTO 80
do o processo. (29, 28, 30 e 3 ). O jogo termina quan-
1 150 PRINTeM,CHRS(94)
do a tecla CLKAR (código 26) tiver si- 160 PRINTêM+64 " " .

FM do pressionada.
As linhas 150 e 160 verificam se as
170
180
M=M-64
IF K=A GOTO 20
30 CLS 190 IF M>0 THEN GOTO 150 ELSE
bordas da tela foram ultrapassadas. Se
40 LET X-17 PRINT «M+64, " "
foram, retornam à posição da base pa- 200 GOTO 80
50 LET Y-20
" ra as últimas coordenadas (LX e LY).
60 LOCATE X.Y:PRINT *
70 AS-INKEYS:IF AS""" THEN GOTO Finalmente, a linha 60 faz o ciclo sc
70 repetir, para a próxima pressão à tecla.
80 LET LX-X:LET LY-Y Para rodar também no ZX-81, digi-
90 LOCATE LX LY PRINT" , : te o programa abaixo apenas com letras
100 .IF AS-CHRS<27) THEN END maiúsculas:
110 IF AS-CHRS (28) THEN X-X+l
120 IF AS-CHRS ( 29) THEN X-X-l Agora você já tem alguns blocos a 20 CLS
130 IF AS-CHRS (30) THEN Y-Y-l partir dos quais podem ser montados vá- 30 PAUSE 25
140 IF AS-CHRSOl) THEN Y-Y+l rios jogos. O exemplo abaixo mostra co- 40 LET x-15: LET Y-21
150 IF X<0 OR X>36 THEN X-LX mo usá-los para desenvolver um jogo 50 LET BS-" JB» "
Y-LY 60 LET a-INT (RND*28)+2
160 IF Y<0 OR Y>20 THEN bem simples, em que um canhão móvel
170 GOTO 60 70 PRINT AT 2. a;"*"
dispara mísseis em direção a um alvo
80 LET xx-X
(uma estrela): 90 PRINT AT y.x;BS
O programa para a linha MSX c bas-
tante compacto e elegante. A linha 60
100 IF INKEYS-"z" THEN LET X-
x-1
coloca a base em posição inicial (três ca-
110 IF INKEYS--X - THEN LET x-
racteres gráficos), que é definida nas li-
x+1
nhas 40 e 50, ou seja, na linha 20 e na 20 CLS
120 IF x<0 OR x>27 THEN LET x
coluna 17 (no meio da última linha da 30 FOR N-l TO 100:NEXT N
40 LET PO-430
tela). A linha 70 detecta se alguma tecla 140 IF INKEYSO"f" THEN GOTO
50 LET B$-CHRSU43)+CHRS(140)+C
foi pressionada. 80
HRS (128) +CHRS (140) +CHRS (143)
Se alguma tecla foi pressionada, o 145 LET m-y-1
60 LET A-RND(30)+64
programa arma/ena em LX e LY as 70 PRINT 6A, -*"
150 PRINT AT n,x+2;"T-
coordenadas da última posição da base 160 PRINT AT m+l.x+2;" "
80 LET LP-PO 170 LET m-m-1
(X e Y), para usá-las posteriormente (li- 90 PRINT «PO.BS
180 IF m-2 AND x+2-a THEN
100 IF PEEKO40J-247 THEN LET P GOTO 20
O-PO-1 190 IF mOl THEN GOTO 150
110 IF PEEK(338)-247 THEN LET P
195 PRINT AT m+l,x+2;" "
O-PO+1 200 GOTO 80
120 IF RO<415 OR PO>444 THEN LE
T PO-LP
130 LET KS-INKEYS FM
140 IF KS-"F" THEN LET M-PO-30
ELSE GOTO 60 20 CLS
150 PRINT êti, "T" 40 LET X-17:LET Y-20
50 LET B3-" JU -
;

160 PRINT êM+32," ";


Por que o meu programa "bomba 170 LET M=M-32 60 LET A-INT(RND(l)*36)+2
listo é. falhai se. num jogo qualquei 70 LOCATE A, 0 PRINT "*"
180 IF M-A THEN GOTO 20 :

a figura que está sendo movimentada 190 IF «>0 THEN GOTO 150 ELSE P 80 LET XX-X
atinge a borda da tela? RI NT 3M+32." 90 LOCATE X Y PRINT BS
. :

Provavelmente porque um dos va- 200 GOTO 80 95 LET AS-INKEYS:IF AS-" THEN
lores que controlam o posicionamento GOTO 95
da impressão do gráfico na teta tornou
se muito grande ou muito pequeno,
cedendo os limites da teta. Portanto,
verifique 6e novo as linhas que fazerr
D
20 CLS
100 IF AS-CHRS (28) THEN LET X-X
t-1

110
-1
IF AS-CHRS (29) THEN LET X-X

essa tarefa, caso você obtenha algume 30 FOR N-l TO 100:NEXT N 120 IF X<0 OR X>35 THEN LET X-X
mensagem de erro do computador, 40 PO-800 X
neste sentido. Por precaução, é sem 50 BS=CHRS(32)+CHRS(184) 130 IF ASO " " THEN GOTO 80
pre recomendável testar os valores de CHRSU91)+CHRS(180) 140 LET M-Y-l
posicionamento antes de imprimir algu CHRS (32) 150 LOCATE X+2.M:PRINT "I"
ma coisa na tela: se eles excederem os 60 A=RND (60) +2 160 LOCATE X+2,M+1:PRINT " "
limites, podem ser corrigidos para fica 70 PRINT3A, "*" 170 LET M-M-1
rerh dentro da tela. 80 LP=PO 180 IF M-0 AND X*2-A THEN GOTO
90 PRINT6P0.BS: 20
1

IIIIIIIIIHUHHlHiMHHMHIIIIIIIIIIII
as teclai; por isso o programa dado aci-
ma não necessita qualquer modificação:
basia ficar pressionando a lecla de co-
mando para baixo, que a base se move
automaticamente.
Já para os computadores que não dis-
põem desses recursos, temos que nos sa-
tisfazer com o INKEYS, mesmo. Mas é
programar movimentos contínuos
difícil
usando INKEYS.
Um modo de se resolver esse proble-
ma é ilustrado a seguir.

Q
20 CLS
30 LET BLS=CHRS(128)
40 LET P0=238
50 PRINT ePO.BLS
60 LET LP-PO
70 IF PEEK(340)=247 THEN LET PO
-PO-l:GOTO 120
80 IF PEEK(338)=24? THEN LET PO
-P0+1 :GOTO 140
90 IF PEEK(338)-251 THEN LET PO
=P0-32:GOT0 150
100 IF PEEK(342)-253 THEN LET P
0-PO+32:GOTO 150
110 GOTO 70
120 IF(LP AND 31)=0 THEN LET PO
-LP

-LP
150 IF PO>510 OR PO<0 THEN LET
P0-LP:G0T0 70
-
160 PRINT «LP. *;
170 PRIMT EPO.BLS;
180 GOTO 60

20 CLS
30 BLS=CHRS(191J
190 IF MOO THEN GOTO 150 "Movimentos Sobre a Tela". Os PEEK 40 PO=540
200 LOCATE X+2 ,M+1 PRINT" :
*
no programa para o CP400 verificam se 50 PRINTePO.BLS;
210 GOTO 80 Z ou X foram acionados e alteram PO 60 LP = PO
70 IFPEEKU43441 O0 THEN
de maneira apropriada.
Quando você executar o programa, PO+l:G0TO 120
A primeira parte do programa tem 80 IF PEEK (14368 <>0 THEN PO"
verá uma estrela perto do topo da (ela. várias funções. A linha 30 provoca uma PO-l:GOTO 140
)

As teclas Z e X movem a base de fogue- pequena pausa antes que o programa 90 IF PEEK (14352)00 THEN PO=
tes para a esquerda e a direita, e a tecla continue. Isso é importante quando a li- PO-64:G0TO 150
F dispara o míssil para destruir a estre-
nha 180 fecha o laço no fim do progra- 100 IF PEEK(14400)O0 THEN PO-
la em sua posição. ma. As linhas 40 e 50 determinam a po- PO+64:GOTO 150
Pense no programa como tendo três
sição inicial da base e definem sua 110 GOTO 70
partes: uma, ate a linha 70; outra, da 80 120 IF (LP AND 63)-0 THEN PO=LP
até a 120; e a última, da 130/140 até a 130 GOTO 150
200. 140 IF (PO AND 63J-0 THEN PO=LP
As linhas que vão de 130/140 até 200 MELHOR MOVIMENTAÇÃO 150 IF PO>1022 PR PO<0 THEN P0=
LP: GOTO 70
são similares ao programa anterior que
160 PRINT8LP." *
Pressionar a tecla que move a base
;

dispara o míssil. 170 PRINTEPO.BLS;


As variáveis e os GOTO foram mu- para a direita ou para a esquerda toda 160 GOTO 60
dados, mas a única linha adicionada foi vez que se precisa deslocar figuras é bas-
a 180. Ela verifica se o míssil e a estrela tante cansativo. Então, usualmente Ao executar este programa você terá
estão no mesmo lugar. O programa re- montamos um mecanismo de auto- um bloco posicionado no centro da te-
começa em caso positivo. repetição. la. O
programa permite que você o mo-
A
porção central, da linha 80 a 120, Alguns micros, como os da linha va para cima e para baixo, para a direi-
é uma versão compacta do programa MSX, possuem auto-repetiçâo em todas ta e para a esquerda.
2 CÓDIGO Dí MÁQUINA 2
Illllllll Illllllll |
Os computadores contam em binário,

como se tivessem milhões de mãos com


um dedo só. Para aprender a programar
em código de máquina, você deve
conhecer esse sistema.

Um dos problemas de se aprender có-


digo de máquina é que você precisa en-
tender um pouco da teoria dos números.
Não é uma tarefa tão difícil quanto po-
de parecer. Se você sabe contar até 16,
não terá qualquer dificuldade. Mas, ini-
cialmente, é preciso aprender a contar
até 2.

Mesmo a pessoa mais avessa a mate-


mática não tem qualquer dificuldade pa-
ra dizer as horas ou acompanhar o re-
sultado de uma partida de futebol. O
uso dos números faz parte do dia-a-dia
de tal forma que nunca nos preocupa-
mos com a maneira com que eles fun-
cionam.
No mundo ocidental usamos habi-
tualmente um sistema numérico basea-
do no número 10. Isto significa que co-
meçamos uma contagem usando os nú-
meros de 0 a 9. Se precisarmos de uma
grandeza maior do que 9 (por exemplo,
10). usamos os dígitos disponíveis. As-
sim, colocamos o na "casa" da es-
1

querda e o 0 à sua direita.


Este é chamado um sistema de nume-
ração de base 10 ou decimal, porque o
vaíor do dígito é multiplicado por 10 a
cada posição que contamos, a partir da
direita. Por exemplo, o número 3275 va-
le 5 + 7x 10 + 2x 10 x 10 + 3x 10 x
10 x 10 ou seja í + 10+200 + 3000. Ca-
da dígito multiplica seu valor absoluto
por 10 a cada vez que é movido uma po-
sição mais à esquerda. Todo sistema que
usa esse método para representar núme-
ros é chamado de posicionai.
Tudo isso parece óbvio porque faze-
mos esses cálculos todos os dias, sem
sim como 60 minutos de arco em um das em cada pé e 16 onças em cada li-
pensar muito neles. Entretanto, existem
outros sistemas de numeração, diferen-
grau e 6 vezes 60 graus — ou seja, 360 bra. Outra base que ocorre com fre-

tes do decimal, como por exemplo, os


— num círculo completo. quência é o número 12. Temos 12 pole-
Você pode contar até 59 segundos, gadas em um pé, 12 unidades em uma
que são usados nos modernos micros.
mas, se adicionar mais um segundo a es- dúzia e 12 dúzias A
em uma grosa. base
se número, terá um minuto e recomeça- 12 era muito usada tanto para dinheiro
SISTEMAS ANTIGOS Ê NOVOS rá a contar os segundos do 0. E quando como para bens, devido à facilidade
tiver 59 minutos e 59 segundos, um se- com que se divide por 2, 3, 4 ou 6. Cer-
Os antigos babilónios tinham um sis- gundo a mais fará uma hora, sendo ze- tas coisas tinham que ser divididas en-
tema de numeração baseado no núme- rados os minutos e segundos. tre várias pessoas, e a base 12 tornava
ro 60. Os vestígios disso podem ser vis- Resquícios de numeração em outras as transações muito mais simples. O nú-
tos nas nossas medidas de tempo e de bases podem ser encontrados em velhos mero 10, ao contrário, só é divisível por
ângulos: existem 60 segundos em cada sistemas de medidas da Inglaterra. Exis- 2 e 5. Vemos, portanto, que muitas ve-
I minuto, 60 minutos em cada hora, as- tem 8 pintas em cada galão, 12 polega- zes é conveniente usar outra base que
Illllllllll DC Illllllllll
O SISTEMA DECIMAL TODAS AS BASES
OUTRO S NUMÉRICOS
S ISTEMAS O SISTEMA BINÁRIO
COMO CONTAR EM BASE 9 BITS E BYTES

CONTAS E M DIFER E NTES BASES COMO O COMPUTADOR


CONVERSOR PARA

Os dez dedos das mãos levaram do que vimos até agora. Para manejá-
o homem a conlar usando a base 10. los mais facilmente, temos que inventar
Auxiliares de cálculu simples, como n novos números.
ábaco, ou contador, são um Dessa maneira, se você quisesse em-
modelo mecânico de* nossos dedos. pregar um sistema de base 12, teria de
inventar números para representar o 10
e o 11. Em
duodecimal, 10 representa
mente até 8 e, para obter o número se-
1X 12, ou 12. E 11 significa x 12 + 1, 1

ou seja, 13 em decimal.
guinte, colocaríamos o 1 numa posição
mais à esquerda e o 0 na posição à di-
O modo mais fácil de aumentar a fai-
xa dos números é utilizar o alfabeto. O
reita. Ou seja, o decimal 9 seria repre-
10 pode ser A, e o B. A2 seria, as-
1 ,

sentado no sistema nonário pelo núme-


1

sim, 122; e BA, 142.


ro 10.
Da mesma forma, se somássemos 1

a 18, teríamos 20; e 100 se somássemos UM PROGRAMA PARA TODAS AS BASES


1 a 88.
Como se pode ver pelo exemplo aci- Fazer contas em bases de numeração
ma, as regras da aritmética se aplicam que não sejam decimais pode ser bastan-
sempre, não importando qual seja a fa- te difícil e cansativo. Assim, apresenta-

se do seu sistema de numeração. Você mos aqui um programa que faz contas
pode tentar operações simples num sis- em qualquer base até 36. Quando você
tema de base 7 ou 8, e assim por diante. rodá-lo, ele vai perguntar em que base
Qualquer que seja a base, as regras ma- quer trabalhar. Você deve responder em
temáticas são sempre válidas. decimal.
No nosso sistema nonário, a cada ca- A seguir, ele pede um número. Este
sa para a esquerda que o número deslo- deve ser digitado na base que você sele-
ca, seu valor absoluto é multiplicado por cionou. Se foi a base 8, não deve haver
nove. Dessa forma, 3275 em nonário é nenhum número acima de 7. E se você
igual a5 + 7x9 + 2x9x9 + 3x9x escolheu uma base acima de 10, os nú-
9x9, ou seja, 2417 em decima!. Você meros acima de 9 deverão ser digitados
deve ler notado que não existe o núme- por meio das letras do alfabeto, sempre
ro 9 no sistema nonário. Ele é represen- maiúsculas. 10 será A, U, B, 12, C, e
tado por 10. Assim, seria correio dizer assim por diante.
que, em nonário, 3275 é igual a 5 + Então, o computador perguntará que
7x 10 + 2x lOx 10 + 3x lOx lOx 10. operação você deseja ( + , - * ou / re- ,

Com um pouco de agilidade mental presentando respectivamente soma, sub-


você pode fazer alguns cálculos simples tração, multiplicação e divisão). Após
em nonário. Por exemplo: 99x9 dá 891 isso, você deverá digitar outro número,

em decimal. Em nonário, o número 99 na mesma base do anterior. Se a sua


é representado por 20; isto é: 1x9x9
1 operação é divisão, e a resposta não é
+ 2x9, ou 81 + 18. E 9 é 10. um inteiro, o computador lhe dirá que
Assim, em nonário, 99x9 se traduz a operação não será realizada. "Divisão
não 10. Uma libra dc peso, por exem- por 120 x 10 ou 1200, queé 1 x9x9x9 não exala", será a mensagem no vídeo.
plo, pode ser dividida em onças por su- + 2x9x9, 891 em decimal. Se não; a operação e seu resultado apa-
cessivas divisões ao meio. Qualquer adição, subtração, multi- recerão na leia na base que você esco-
plicação ou divisão de números noná- lheu para operar.
rios funcionaránormalmente. Confira
CONTANDO COM NOVE DEDOS você mesmo. Só é preciso um pouco de
cautela.Lembre-se que 16 em decimal
ÍIO
10 CLS
Não há nenhuma razão que impeça é 17 em nonário.
20 INPUT"BASE (ATE 36) ";B
o uso de um sistema baseado em qual- 30 INPUT" NUMERO (INTEIRO)
quer número escolhido ao acaso. Se ti- PROBLEMAS DAS BASES ACIMA 0E 10 40 INPUT-SINAf- " SS :

véssemos nascido, lodos, com 1 dedo a 50 INPUT"NUMERO(INTEIRO)


menos em uma das mãos, provavelmen- 60 PS-AS:GOSUB 210
te usaríamos um sistema "nonário" ou Lidar comsistemas numéricos de ba- 70 XS-STRS (DE)
seja, de base 9. Contaríamos normal- se maior que 10 é um pouco mais difícil 80 PS-BS:GOSUB 210
>

IIIIIIIIIIIIHBI > CÓDIGO DCtMQUINA 2 |HH|||||||||||


90 YS°STRS<DE) 210 DE'0 110 IF SS-"/" THEN X-VAL(XS)/VA
100 IF SS="*" THEN X=VAL (XS) "VA 220 IN-0 L(YS)
L(YS) 230 Y-ASC (RIGHTS (PS 1) , 120 IF SS-"+" THEN X-VAL(.XS>+VA
110 IF SS-"/" THEN X=VAL(XS)/VA 240 IF Y<58 THEN D=Y-48:G0T0 26 L(Y$>
L(Y5) 0 130 IF SS-"-" THEN X-VAL(XS)-VA
120 IF SS-"+" THEN X-VAL (XS ) +VA 250 D-Y-55 L (YS>
L(YS> 260 DE-DE+D*B* IN 140 IF XOINT(X) THEN NS-"Opera
130 IF 88*"-" THEN X-VAL (XS) "VA 270 PS-LEFTS(PS.LENÍPS)-l) c3o impossível " :GOTO 190
L(Y$) 280 IN-IN+1 150 U-B*INT(X/B) :IF X-U>9 THEN
140 IF XOINT(X) THEN NS-"IMF0S 290 IF LEN(PS)>0 THEN GOTO 230 NS-CHRS (55+ (X-U> +NS :GOTO 170
)

SIVEL" :G0T0 190 300 RETURN 160 NS-MIDS (STRS (X-UÍ+NS. 2)


150 U-B*INT (X/B) IF X-U>9 THEN
: 170 X-INT(X/B)
Este programa, como está, roda ape-
NS-CHRS (55+ (X-U) +NS:G0T0 170
) 180 IF X>0 GOTO 150
160 N$=MIDS(STHS(X-U)+NS.2) nas nos compatíveis com o TRS-Color. 190 LOCATE 0.12:PRINT AS*" "+S3
170 X-INTIX/B) Para rodá-lo nos modelos TRS-80, mo- +" *+BS+" "+"-"+" "+NS
180 IF X>0 GOTO Í50 difique a linha 190 para: 200 END
190 PRINT #257 AS+" "+SS+" "+BS
,
190 PRINTê513,AS+" 210 DE-0
;- ":NS +S5
+ BS+ " ;NS
220 IN-0
200 END 230 Y-ASC(RIGHTSÍPS.D)
240 IF Y<58 THEN D=Y-48:G0T0 26
0
10 POKE 23656,8 250 D-Y-55
20 INPLIT "Ba3e (ate 36) ";b 260 DE=DE+D*B" IN
30 INPUT "Numero (inteiro) 270 PS-LEFTS(P$,LEN(PS)-1)
LINE aS 280 IN-IN+1
40 INPUT "Sinal
"; LINE sS 290 IF LEN(P$)>0 THEN GOTO 230
INPUT "Numero (inteiro)
50 300 RETURN
LINE bS
UM MODELO PARA NÚMEROS EM 60 CLS
DIFERENTES BASES 70 LET p$-aS: GOSUB 180
As vezes é muito difícil visualizar co 80 LET xS-STRS dec
10 funciona um sistema de numeração
90 LET pS-bS: GOSUB 180
de base diferente ao de base 10. Afi- 95 LET yS-STRS dec
nal, não é fácil ter que cortar fora al-
100 LET zS-xS+sS+yS: LET X-VAL
guns dedos, ou fazer crescer dedos adi - zS
s mãos, de modo que você
110 IF xOINT X THEN LET nS-"
parece obrigado a se satisfazer com o Imposs í vel realizar a operação
i! Mas seria possível, por exem-
.
" GOTO 160
:

plo, grudar dois dedos um no outro com 120 LET nS-""


fita adesiva, para contar na base 9, ou
130 LET u-INT (x/b): LET u-u*b
r dois palitinhos extras de conta-
: IF x-u>9 THEN LET nS-CHRS (

gem, para trabalhar na base 12. 55+(x-u) )+nS: GOTO 140


solução mais inteligente seria 135 LET nS-STRS (x-u)+nS
o seu próprio ábaco, ou cal- 140 LET X-INT (X/b)
culadora de continhas, similar àqueles 150 IF K>0 THEN GOTO 130
mostrados nas fotos que acompanham 160 PRINT AT 10.0;aS+sS+b$;"-
esta lição. Um ábaco convencional *;n3
(mesmo aqueles de brinquedo, para 170 STOP
criancal pode ajudar e agilizar as
180 LET dec-0
le base 10: assim
190 LET indice-0
cê pode criar um ábaco com tantas bo 200 LET y-CODE pS(LEN pS)
linhas em cada vareta da moldura quan
210 IF y<58 THEN LET d-y-48:
er. Não é necessário nem mes
GOTO 220
a moldura cheia de
215 LET d-y-55
mes, mas simplesmente arranjar uma 220 LET dec-dec+d*b" índice
série de sulcos paralelos, para conter
230 LET p$-p$(l TO (LEN pS)-l)
s bolinhas e fazè-las rolar para cima
240 LET indice-indice+1
250 IF LEN pS>0 THEN GOTO 200
Não se esqueça de que <
260 RETURN
'a file' a é um a me-
nos do que a base em que você quer
trabalhar Assim, na base 10, você pre-
10 CLS
e ape-
nas uma. Nenhuma bolinha equivale ao 20 INPUT "BASE (ATfi 36) ";B
número zero, em qualquer sistema de 30 INPUT "NUMERO (INTEIRO) ";AS
numeração. Uma bolinha afastada das 40 INPUT "SINAL " SS ;

demais significa o número 1, e assim 50 INPUT "NUMERO (INTEIRO) ";BS


por diante. Quando a operação exigir
60 PS-AS:GOSUB 210
70 XS-STRS(DE)
"s de 9 bolinhas no sistema decimal,
zere a fileira de volta, e suba uma boli-
80 PS-BS:GOSUB 210
nha na fileira seguinte (é a operação de 90 YS-STRS (DE)
"VttH "1 100 IF SS-"*" THEN X-VAL (XS) *VA
L(YS)
,

muniu DIGO DC MAQUINA III


190 HTAB 10: VTAB 15: PRINT AS humana, o computador só consegue fa-
QBE] 200
iSS;
END
1

;NS zer cálculos em decimal, dentro de um


programa escrito em BASIC, apesar de
10 HOME 210 DE - 0 converter os números para binário,
20 INPUT "BASE (ATE 36) ->";B 220 IN - 0
quando as instruções são traduzidas pa-
30 INPUT "NUMERO (INTEIRO) •> 230 Y - ASC RIGHTS (PS, D)
(
ra código de máquina durante a execu-
iM 240 IF Y < 58 THEN D - Y - 18:
40 INPUT "OPERAÇÃO (+.-,"./) GOTO 260 ção do programa.
>" ;S3 250 D - Y - 55
50 INPUT "NUMERO (INTEIRO) -> 260 DE - DE + D * B ~ IN
265 IF LEN (PS) - 1 THEN RET
60 PS - AS: GOSUB 210 IAM
LEN (PS) - Para os computadores digitais, o sis-
70 X - DE 270 PS - LEFTS (PS.
80 PS - BS: GOSUB 210 1) tema de numeração mais apropriado é
90 Y DE '
280 IN - IN + 1 o baseado no número 2. Isso acontece
IF SS •

"*" THEN X 290 GOTO 230 porque o computador é composto de
110 IF SS : "/" THEN X 300 RETURN circuitos eletrônicos que possuem dois
"+" THEN X » X +
IF SS estados evidentes: ligado e desligado. O

IF SS ' "-" THEN X - x - Se você acha que fazer comas em di- estado "desligado" representa o núme-
140 IF X < > INT (X) THEN 1
versas bases é mais do que pretende sa- ro 0, e o "ligado", o número 1. E, na
"NAO DA"
- GOTO 190 ber algum dia, note que o computador base 2, estes são todos os números de
150 U - INT (X / b: 1

também trapaceia. O
programa, na rea-
9 THEN NS - CHHS que você necessita para expressar qual-
lidade, converte os números que você di- quer valor.
X - GOTO 170
U) ) + NS:
160 NS - STHS (X - U) - gitou em decimais, executa a operação O sistema de numeração de base 2 é
170 X - INT (X / B) e reconverte o resultado para a base que conhecido como "binário". Ele é com-
180 IF X > 0 THEN 150 você escolheu. Ao contrário da mente posto apenas por zeros e uns; todos os
outros números foram abolidos. Dessa
forma, se você começar a contar da ma-
neira habitual, não vai passar de So- 1 .

me 1 a 1 e terá o número 1 deslocado


uma casa para a esquerda, enquanto a
casa da direita é zerada. Assim, em bi-
nário, 1+ = 10.
1

Contar de 0 a 8 resulta em 0, 1 , 10,


11, 100, 101, 110. Ill, 1000. Novamen-
te, estes números obedecem às leis da
aritmética. Se você quiser somar 10+"1 1,
deve primeiramente somar os dois nú-
meros da direita, 0+ 1. A
devem seguir,
sersomados os dois da esquerda. + 1 1

o que dá 2; só que 2 em binário é 10.


Assim 10+11 = 101; ou seja, 2 + 3 = 5.
Subtração em binário é um processo
soma. O único de-
tão direto quanto a
número que se "le-
talhe a observar é o
va" para a próxima casa.
A multiplicação e a divisão são ex-
traordinariamente fáceis, mesmo para
seres humanos "normais". Na realida-
de, é tão fácil que "até" um computa-
dor pode fazer essas operações. No pri-
meiro caso, tudo se resume a multipli-
car 0x0. que dá 0; 0 x 1 que também ,

dá 0; ou Ixl, que dá 1.
A divisão é igualmente simples: em
cada operação, basta decidir se o divi-
sor está dentro do dividendo uma vez ou
nenhuma vez.
Confira você mesmo como os proces-
sos aritméticos funcionam cm binário.
O painel das páginas seguintes dá exem-
plos de operações para você fazer.

Qualquer sistema de numeração pode se


imitado por um modelo mecânico:
o relógio, por exemplo, usa a base 60,
enquanto o ábaco utiliza a base 10.
0

MIM CÓDIGO Di MAQUINA llllllllll

teiros. É possível, também, converter 130 PRINT"OUTR0 NUMERO (S/N) ?"


fraçòes em números binários. 140 AS-INKEYS
Por exemplo, 1/2 é 0.1 em binário; 150 IF AS-*S" THEN 10
Os números binários refletem exata- 160 IF ASO"N" THEN 140
mente o que acontece no computador. 1/4 é 0.01 e 1/8 é 0.001 Existe urnpa-
.

170 END
As instruções ou dados que você dá a drão determinado. Qualquer fração po-
ele são codificados em números biná- de ser formada a partir de l/2s, l/4s,
l/8s, l/16s, etc, da mesma forma que
O
programa acima, como está, roda
rios, que, por sua vez, são manipulados apenas nos compatíveis com o TRS-
e armazenados pelos circuitos internos qualquer número inteiro pode ser for- Color. Para os modelos tipo TRS-80,
do aparelho. Assim, quando você come- mado a partir de Is, 2s, 4s, 8s, etc. O modifique a linha 110 para:
ça a dominar o sistema binário, come- problema é que é mais difícil trabalhar
ça também a compreender como funcio- com frações binárias porque sempre te- 110 PRINTg513,'0 NUMERO BINÁRIO
na o computador. mos uma infinidade de Os e Is!
Cada um dos dígitos de um número Quando você converte frações, é me-
binário é representado eletronicamente lhor pensar nelas como 0.5; 0,25 e as-
sim por diante. Desta forma, você po- 10 CLS
dentro do computador por um circuito 20 PRINT "Conversão de Decim
ligado ou desligado. Se está ligado, o va- de manipular uma fração como 0.75 co-
al para Binário"
lor é 1 Se, pelo contrário, o circuito es-
.
mo sendo 1 x 0.5 + I x 0.25, o que sig- 30 INPUT "Digite um numero en
tá desligado, o valor é 0. Cada digito é nifica em binário 0.11. tre 0 « 1*,N
conhecido como um bit. O próximo programa permite que vo- 40 IF NO0 OR N>-1 THEN GOTO
Esses circuitos são agrupados em uni- cê trabalhe com frações binárias sem 30
dades maiores, que representam núme- grandes dificuldades: 45 FRINT '' "Decimal i "iN
ros também maiores e mais úteis. Em 50 LET NS-"0."
quase todos os micros, os bits estão or-
ganizados em grupos de oito, forman-
do o que se conhece como um byte. Ca-
li
10 CLS
60 FOR T-l TO 16
70 LET N-N"2+lE-9
80 LET NS-NS+CHRS (48+INT N)
90 LET N-N-INT N
da byte representa, assim, oito dígitos 20 PRINT"CONVERSAO DE DECIMAL P 100 NEXT T
binários, de forma que pode armazenar / BINÁRIO" 110 print '""o numero binário
qualquer número entre 00000000, ou ze- 30 PRINT:INPUT"DIGITE UM NUMERO
ro.e 11111111, ou 128 + 64 + 32 + 16 + ENTRE 0 E 1 ";tt 120 PRINT NS
8 + 4 + 2 + 1, que é 255. Números maio-
40 IF N<-0 OR N>-1 THEN 30 130 PRINT Outro numero {

res que 255 são representados por dois


50 NS-'0." S/N)?-
60 FOR T-l TO 30 140 LET AS-INKEYS
ou mais bytes.
70 N-N*2 150 IF AS-"S" OR AS-"9" THEN
80 NS-NS+CHRS(48+INT(N)) GOTO 10
90 N-N-INT(N) 160 IF ASO"N" AND ASO"n"
100 NEXT T THEN GOTO 140
110 PRINT §257, "0 NUMERO BINARI
Todos os programas e exemplos da- O E: ' Tal como está, o programa acima ro-
dos até aqui manipularam números in- 120 PRINT PRINT NS:PRINT
: da apenas no Sinclair Spectrum

[adicao BINARIA DECIMAL UBTRACB0 BINARIA DECIMAL

11001 II 1100111 1011001 1O1IO01 = 89

+1OOO10 100010 -110011 110011

10001001 103 + 34 1001 10 99 - 51 = 36

1O001O01 = 137 1 OO ) 1

A adição binaria funciona a partir da direita. 0 + 0 dá 0, 0 + 1 A subtração binária é igualmente simples. 1 - 1 dá 0, 0 - I


dá 1, e I + 1 resulta cm 10, que é o 0 dá I. Agora, a operação 1 - 0 dá 0 e "vai-um" para o
com "vai -um" para o próxima digito. Observe como essas próximo digito à esquerda. Os resultados, portanto, não são todos
operações funcionam na soma real liada acima. exalamenle iguais ao da mesma operação no sistema decimal.
immiiHiiM——
(TK-90X). Para rodar no ZX-81. subs-
— wiiiiiiiiiiiii

titua as linhas seguintes:

30 PRINT "ENTRE UM NUMERO ENTRE


0 E 1"
35 INPUT N
80 LET NS-NS+CHRS ( 2B+INT N)

10 CLS
20 PRINT TAB (7 )
;
"BINÁRIO » DEC
IMAL"
30 PRINT:INPUT " digite um nume
ro entre 0 * 1 " ;N
40 IF N<-0 OR N>-1 THEN 30
50 NS-"0."
60 FOR T-l TO 30
70 N»N*2
BO NS-NS+CHRS (48+INT tN)
90 N-N-INT(N)
100 NEXT T
110 LO CATE 0.10:PRINT "O numero
"
binário é :

120 PRINT PRINT NS PRINT


: :

130 PRINT "outro número {S/N) 7

140 AS-INKEYS
150 IF AS-"S" THEN 10
160 IF ASO"N" THEN 140
170 END

HE]
PRINT "CONVERSÃO DE

Um ábaco binário utiliza uma C


cada varela. No computador,
essa disposição é substituída
por pulsos elétricos.

MULTIPLICAÇÃO BINARIA UVISfiO BINARIA DECIMAL

1101 1101 = 1 1001 ! 101 11001 =


toti -
1

101. 101 101 -


13 t 11 - 143 25 / 3 =
noi (H>0
1101 10001 111 = 143 101
oooo

\ 1 000

Em cada fase da multiplicava» binária, você multiplica 0 por Na divisão binária, finalmente, é necessário verificar se o
divisor cabe no dividendo pelo menos uma vez. Se isto
D, que da 0, uu 1 por 0, que também dá 0, ou ainda I por 1,
acontecer, o resultado será I; caso contrário, será 0.
que resulta sempre em 1. Veja como Isto se aplica no exemplo
acima, onde é simulada uma operação ao vfdeo do computador. Isso faz da divisão uma das operações binárias mais simples
Illlllllll 2 CÓDIGODl MÁQUINA 2 Illlllllll

CIMAL PARA BINÁRIO" 150 IF AS - "S" THEN 10 te inteira de N para deixar apenas a
30 PRINT PRINT "DIGITE UM NU
: 160 IF AS < > "N" THEN 130 decimal.
MERO": INPUT "ENTRE 0 E 1 ->" ;N 170 END O programa no Sinclair Spectrum è
40 IF N < - 0 OR N > -1 THE um pouco diferente, porque enquanto
N 30
50 NS - "0.
O programa aceita qualquer número INT 1 é I , como se espera, INT (.5 x 2)
entre 0 e e imprime o seu equivalente
1 é 0. Isto acontece porque ele armazena
60 FOR T - 1 TO 38
70 N - N * 2 binário. A linha 70 começa por dobrar .5x2 como .99999999... Assim, uma
80 NS - NS + CHRS (48 + INT (
o seu número e a linha 80 constrói o nú- pequena f ração tem que ser adicionada
N) )
mero binário. Inicialmente o computa- aN na linha 70 para fazer com que INT
90 N - N - INT (N) dor trabalha com o valor de INT(N), funcione como deve.
100 NEXT T que será ou 0 ou 1. Então, a esse valor Nos modelos compatíveis com o
110 HTAB 1: VTAB 15: PRINT "O adiciona-se 48 para perfazer 48 ou 49, ZX-81, a linha 80 usa outro número pa-
NUMERO BINÁRIO E " :
que são os códigos ASCII para 0 e 1. ra somar ao valor inteiro de N (observe
120 PRINT PRINT NS PRINT
: !
Tudo isto é feito de forma a transfor- que essa máquina não usa o código AS-
130 PRINT PRINT "OUTRO NUMER
mar os números em cadeias de caracte- CII). O valor 28 corresponde ao carac-
:

O? " ;

res para que possam ser adicionados à tere 0, o valor 29 ao caractere 1, etc. e
140 GET AS
variável N$. Na linha 90 tiramos a par- assim sucessivamente.

O LONGO TRAJKTO DO ÁBACO A ELETRÕNICA


Os números hinários podem ser gama de representação de OIIOINHKM) nu 255 em decimal. No manual do
adicionados, subtraídos, multiplica- — ou 0 em decimal — a 1 1 1 1 1 1 1 1 — seucomputador esse •número mági-
dos e divididos como qualquer núme- co" — 255 (ou 256, se você contar
ro na base 10. Knlretanlo, eles foram a partir de I ao invés de 0) apare-
, —
escolhidos para utilização nos com- ce a lodo momento.
putadores digitais em virtude de uma As vezes são necessários núme-
propriedade singular: é fácil verificar ros binários muito maiores, e duas
se um
determinado circuilo eléirico locações de memória de 8 bils cada
são junladas para obter um número
ou eletrônieo eslú ligado ou desli-
hinário de 16 bits. O microproces-
gado.
sador Zilog Z-80, evislenle em mui-
Os dígitos binários são represen- tos computadores pessoais, como o
tados por circuitos de computador. TKS-80, os compatíveis com MSX,
Quando um circuito está desligado, ele., pude irabalhurcum números de
ele representa o dígito 0, e quando 16 bits, c até mesmo lazer operações
cslá ligado, n dígito I. Nos circui- aritméticas com eles. Nesles casos,
tos integrados do computador, o números hinários entre
circuitos hinários são arranjados 00(10000000000000 e
em grupos de 8, de lai íorma que 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 , ou seja,
valores binários de 8 hils podem Mitre II e 65.535, em decimal,
ser representados. Isso dá uma podem ser manipulados.

101 1 101 1-01001 101=01 101 1 10

0111111 1 + 0000000 1 = 10000000

1 100 ni 11101 1 110-0H101 10001 0011 = 0 i0i 1 1001 1010101 í


IIIIIIIIIIIIHH llllllflll
ESCOLHA 0 CAMINHO A
E! ESE1 SEGUIR
DECISÕES MAIS COMPLICADAS

ar APRENDA A UTILIZAR 0
COMANDO IF...THEN...ELSE

Embora não tenha cérebro, o computador


tem capacidade para decidir de
forma lógica. Aprenda a trabalhar com
a instrução IF...THEN e ensine seu
micro a tomar decisões corretamente.

O que corna um computador infini-


tamente superior a uma máquina de cal-
cular é sua capacidade de tomar decisões
baseadas em raciocínios lógicos. Um
desses raciocínios é o comando
IF...THEN. O computador reage a es-
sa declaração de modo semelhante a um
ser humano: SE (IF) isto é verdadeiro,
ENTÃO (THEN) faça tal coisa. Eis um
exemplo:
IF A< 18 (ou seja,
SE A é menor que
18) THEN PRINT"menor de idade"
(ENTÃO IMPRIMA "menor de idade")
Ao encontrar a declaração FF, o com-
putador verifica se a proposição que a
segue é verdadeira. Se for, ele executa
tudo o que estiver após o THEN. Se a
proposição é falsa, ele ignora o resto e
passa para a próxima linha do programa.
Você verá como funciona tudo isso
no programa a seguir.

10 PRINT "Digite a lista das no


tas"
20 PRINT "Digite -99 para termi

30 INPUT N
40 IF N--99 THEN PRINT "Média -
" ;T/C:STOP
50 LET T-T+N
60 LET C-C+l
70 GOTO 30

A mensagem no inicio do programa


instrui o usuário a digitar primeiro uma
lista de notase por fim o número -99.
As linhas 25 e 26 zeram o valor das va-
riáveis do total (T) e do contador (C).
A linha 30 dá entrada ao valor que vo-
cê digita. A
linha 50 adiciona esse valor
ao total corrente, e a linha 60 conta
quantos números você digitou, adicio-
nando 1 à variável do contador cada vez
que um novo número é dado.
Enquanto você estiver digitando no-
" "

illllllllllHH lllllllll

tas reais, o computador ignorará a linha !*:FOR D-l TO 2000:NEXT D:GOTO ra rodá-lo no Apple II e no TK-2000,
40 e seguirá em frente, mas, quando vo- 10 elimine a linha 3 e substitua o comando
cê digitar -99, a condição da linha 40 60 IF C<N THEN PRINT "ESTA BAIX da linha 5 por HOME.
O, TENTE OUTRA VEZ!"
N = -99 será satisfeita, e o computador 70 IF G>N THEN PRINT "MUITO ALT
imprimirá a média das notas (T/C). Nú- R-RNDi-TIME)
O! TENTE DE NOVO. 3
meros como -99 são chamados de fictí- 80 GOTO 40 S CLS
cios, ou terminais, e são úteis para con-
10 LET N-INT(RNDU)*21)
trolar o que acontece em um programa.
20 PRINT "Acabo de pensar e um
Este é um recurso muito usado para in-
terromper partes de um programa.
Atenção: digite o programa abaixo 30 PRINT "...aerá que voce cons
em maiúsculas, se quiser executá-lo nos egue advinhá-lo ?"
UMA ESCOLHA COM TRES CAMINHOS compatíveis com ZX-81:
40 INPUT G
50 IF G-N THEN PRINT "Certo, DU
5 CLS
E se você quiser escolher entre três ou ito bem!":FOR D-l TO 2000:NEXT
10 LET N-INT (RND*20)+1
mais alternativas, de modo a colocar o D: GOTO 5
20 PRINT "Eu acabo de imagina
computador em diferentes cursos de 60 IF G<N THEN PRINT "Muito bai
ação? É simples: o computador sorteia xo, tente outra vez."
um número que você tem de adivinhar; 30 PRINT "Tente adivinha-lo .

70 IF G>N THEN PRINT "Alto d ema


ao comparar o seu palpite com o núme- 40 INPUT G
ia, tente outra vez."
ro sorteado, ele elabora três alternativas: 50 IF G-N THEN PRINT "Muito
80 GOTO 40
o palpite foi correto, foi muito baixo, bem!": PAUSE 100: GOTO 10
ou muito alto. Tudo se passa, portan- 60 IF G<N THEN PRINT "Esta b
como num jogo de advinhação.
A linha 10 escolhe um número ao
to, aixo; tente outra vez!" acaso entre 1 e 20, e as linhas 20 a 40
70 IF G>N THEN PRINT "Muito convidam você a adivinhá-lo. Qualquer
alto! Tente de novo." que seja sua resposta, o computador ve-
80 GOTO 40 rifica, nas linhas 50, 60 e 70, que pro-
5 CLS posição é verdadeira.
10 LET N»RND(20)
Suponha que seu palpite seja um nú-
20 PRINT " ACABO DE IMAGINAR UM
NUMERO mero abaixo do sorteado. Neste caso, o
30 PHINT "TENTE ADIVINHA-LO!" computador vai primeiro para a linha
140 INPUT G O programa abaixo, como está, ro- 50; mas P = N é falso, de modo que ele
50 IF G-N THEN PRINT "MUITO BEM dará apenas nos micros tipo MSX. Pa- ignora o resto da linha e passa para a
IIIIIIIIIIIHH lllllllll
seguinte, a linha 60. Agora, a proposi- 40 LET M-M-5
ção é verdadeira, visto que P<N. En- 50 IF M<0 THEN PRINT "DESCULPE
lào, ele imprime a mensagem ""Muito .. VOCE ESTA DURO!":END
computador
Para fazer o testar duas 60 LET A-RND(12)+192
baixo, tente novamente". A seguir, ele
ou mais condições, antes de decidir que 70 LET B=RND(12)+192
passa assim mesmo para a próxima li-
caminho tomar, use palavras especiais 80 LET C-RI9DU2)+192
nha, onde a proposição é falsa, de for-
chamadas operadores lógicos: 210 PRINT §237 CHRS t A) PRINTÉ2 3
, :

ma que ele a ignora e vai para a 80, que


9 CHRS ÍB) PRINT «241.CHRS<C)
, :

leva você de volta para outra tentativa. 100 IF D3="DOMINGO" AND H=20 220 IF A"B AND B-C THEN PRINT #
Este programa funciona muito bem, THEN PRINT " E HORA DO ' 258 , "VOCE GANHOU S50!!!":LET M-
mas tem uma desvantagem: ele continua FANTAETICO" M+50
a pedir um novo palpite ao jogador, sem 230 IF OR B-C) AND AOC T
(A-.B
se importar se este quer ou não conti-
Quando você usa AND (a conjunção HEN PRINT 6361 "VOCE GANHOU S10
,

nuar jogando. Seria interessante fazer e, em inglês) entre duas condições, am- !":LET M-M+10
bas devem ser verdadeiras para que o 240 FOR D=l TO 500:NEXT
com que o computador preguntasse se
computador execute o resto da linha. Se 250 PRINT 6323,"ÇjUER JOGAR OUTR
você quer fazer uma nova tentativa.
uma delas ou as duas forem falsas, ele A VEZ? (S/Nl ": PRINT 6361 "VOCE T .

As próximas linhas fazem exatamente EM S";M


isso. O comando IF...THEN será nova-
passará para a próxima linha. Nesse
mente utilizado, só que desta vez o com- exemplo é necessário que sejam 20 ho-
putador estará comparando letras e não ras de um domingo para que o compu-
números. tador imprima mensagem. Veja outro
Antes de entrá-las em adição ao pro- exemplo:
grama anterior, não esqueça de mudar
200 IF PS-"SAGU" OR
a linha 50 para: PS-"TAPIOCA" THEN PRINT
"NAO ESTOU COM FOME"
50 IF G-N THEN PRINT "CERTO,
OS OPERADORES LÓGICOS
MUITO BEMi":GOTO 100 Essa linha usa OR (ou, em inglês) e Se você náo está acostumado com
o computador imprimirá a mensagem os símbolos usados em matemática pa-
no caso de pelo menos uma das compa- ra expressar relações lógicas, como
rações ser verdadeira. "maior que" e "menor que" — os cha-
O teste pode vir a ser muito compli- mados operadores — pode achá-los
100 PRINT "QUER JOGAR DE NOVO? cado se houver uma quantidade muito meio confusos, no início.
"
S/NJ grande de condições para verificar. Se Assim, pense neles como uma es-
110 LET AS-INKEYS:IF AS'" "THEN você tem vários AND e OR juntos, terá pécie de cunha. No símbolo > o lado
mais aberto, à esquerda, é maior
GOTO 110 que usar parênteses para que o compu-
que o lado mais agudo <a ponta). No
120 IF AS""S" THEN RUN tador saiba o que verificar primeiro. símbolo < o lado mais estreito, á es-
Uma linha de um jogo de aventuras querda, é menor do que o lado direito.
pode se parecer com isto: Deste modo, a expressão A >B deve ser
lida simplesmente: A é maior do que B.
2000 IF P = 14 AND (C3="E3PADA n Colocar o sinal de igualdade - ao la- ( i

100 PRINT "Voce quer tentar oi OR CS="FACA") THEN PRINT do de um dos operadores prévios sig-
tra veifS/N)7" "VOCE DESTRUIU 0 GREMLIN" nifica também que pode se' "maior ou
110 LET AS-INKEYS: IF ASO"S" na
Isso só é verdadeiro se você estiver Eis aqui a lista de todas as combi-
AND ASO"N" THEN GOTO 110 OU uma
posição 14 E com uma espada
120 IF AS-"S" THEN RUN
faca. Mude os parênteses:
2000 IF (P = 14 AND C$-"ESPADA")
OR CS="FACA" THEN PRINT
"VOCE DESTRUIU O GREMLIN" A é maior ou igual a B
Atenção: para poder rodar o progra-
Agora ela será verdadeira se você es-
A é, menor ou igual a B
ma abaixo em computadores tipo Ap-
tiver na posição 14com uma espada OU
A< >B A ; é diferente de B
ple e TK-2000, substitua a linha
se estiver em qualquer lugar com uma Alguns computadores exigem que a
lio GET AS
faca. ordem de digitação dos operadores
compostos seja sempre a mesma. Por
100 PRINT .."Quer jogar outra v exemplo, não se pode digitar > = ou
TIRE A SORTE GRANDE
St (S/N)?" > indistintamente: eles nâo vão acei-

110 LET AS-INKEYS: IF AS-"" THE


tar. Em outros micros, o esquema é
Agora, usando os conceitos que
N GOTO 110 Nos computadores da
aprendemos, vamos programar um jo- linha Sinclair
120 IF AS-"S" OR AS-"s" THEN GO os operadores compostos são digitados
guinho que simula uma máquina caça-
TO 5 atiavés de uma única tecla. Dessa for-
níqueis. Ela faz um bom uso de AND
ma, se você tentar entrar o sinal < se-
e OR. Tente tirar a sorte grande!
guido do sinal =, por exemplo, a linha
A linha 110 espera que você acione
gera um erro de sintaxe.
uma tecla. Caso seja o "S" maiúsculo,
Finalmente, alguns computadores
o programa continuará. Se qualquer ou- aceitam também o sinal # (sustenido),
tra tecla for acionada, o programa ter- para significar "diferente de".
minará.
; " : :

iiiiiiiiiiiuHmHHHMnmiiiiiiiiiu
260 LET K$-INKEY$ IF KS-"" THEN : LET M - M - 5
GOTO 260 IF M < 0 THEN VTAB 22: PRI
270 IF KS-"S" THEN GOTO 30 "DESCULPE, VOCE ESTA DURO"
280 END
60 LET A

70 LET B - INT ( RN D (1)


20 LET M-50
30 CLS LET c INT ( RN D (1) 12
40 LET M-M-5 4)
50 IF M<0 THEN PHINT "Deacul COLOR- VLIN 0 39 AT 16 .

pe. . Voce esta duro!": STOP


.
COLOR- VLIN 0. 39 AT 18
60 LET A- INT (RND*12)+130 C0L0R- VLIN 0,39 AT 20
to boa, pois dificulta
são de como
muito a compreen-
funciona um proclama e 70 LET B-INT (RND*12)+130 110 IF A B AND THEN V B-C
80 LET C-INT (RND*12)+130 TAB 22: PRINT VOCE CANHOU S50
'

pode gerar erros lógicos.


0 princípio básico da declaração 210 PRINT PAPER 0; INK 4;AT
": LET M-M+50
10,14;CHRS A AT 10.16;CHRS B 120 IF (A - B OR B - C) AND A
IF...THEN é que o que vem depois do ;

VTAB 22: PRINT "VO


AT 10,18;CHRS C < > C THEN
THEN na linha do IF, só será executa-
do se a proposição for verdadeira. As- 220 IF A-B AND B-C THEN CE GANHOU $10": LET M-M+10
PRINT AT 13,2;"Voce ganhou S50 130 FOR I - 1 TO 500: NEXT I
sim, na linha:
! "
! LET M-M+50
!
:
140 VTAB 22: PRINT "OUTRA VE2?
230 IF (A-B OR B-C) AND AOC (S/N)?": PRINT "VOCE TEM S";M
70 IF Jt-Y THEN PRINT "NAVE 150 GET AS
DESTRUÍDA" LET NAVES= THEN PRINT AT 13,9;"Voce ganh
:

ou S10 " LET M-M+10


1 160 IF AS - "N" THEN END
NAVE5-1:G0T0 30 :

170 GOTO 30
240 PAUSE 25
Nenhuma das instruções após o 250 PRINT AT 15,6; "Quer jogar
THEN será executada, se X for diferen- outra vez? (S/N)": PRINT TAP. 10
te de Y. Mas, algumas vezes o IF com- ;
"Voce tem S" :M El
posto pode ser útil: 260 IF INKEYS-" " THEN GOTO A versão para o TK-2000 usa os ca-
260 racteres do teclado. Só as linhas que se-
70 IF X'Y THEN PRINT "NAVE 270 IF INKEY$-"n" THEN STOP
DESTRUÍDA": IF NAVES>0'THEN rão substituídas no programa acima
280 GOTO 30
LET NAVES -NAVE S-l aparecem abaixo:

30 HOME
60 LET A - INT ( RN D (1) • 12
20 LET M-50 ) + 222
Note como os dois IFs na linha 70 30 CLS 70 LET B - INT ( RN D (1) * 12
simplificam a programação. 40 M-M-S ) + 222
50 IF M<0 THEN PRINT "Desculpe, 80 LET C - INT ( RN D (1) * 12
seu dinheiro acabou. ":END ) + 222
Por que ocorrem arros quando tento ro- 60 LET A-INT(RNDU)*5 + 66) 90 VTAB 10
dar programas digitados? 70 LET B-INT (RND(l) *5+66) 100 PRINT TAB ( 1B) CHRS (242 ;

Pode ser que existam falhas no pro- 80 LET C-INT(RND(l)*5+66) ); CHRS (A); TAB ( 209; CHRS (24
grama em si, mas os erros mais co- 90 LOCATE 17,10:PRINT CHR$(1)+C 2); CHRS (B) TAB ( 22); CHRS (2
;

muns são de digitação, quando se está HRS(A);" ";CHRS(U+CHRS(B) i" "; 42) : CHRS (C)
copiando. Eis alguns deles (lembre-se CHRS(1)+CHRS(C)
de checá-los um a um, quando estiver 220 IF A-B AND B-C THEN LOCATE O programa usa várias linhas
copiando programas): 2,16:PRINT " VocS ganhou o preui IF...THEN. A primeira, de número 50,
— Confundir a letra maiúscula ou a le-
I
lo máximo ... S50":LET M-M+50 checa se você tem dinheiro para jogar.
tra L minúscula com o número 1; ou 230 IF (A-B OR B-C) AND AOC TH Se você tem, a linha é ignorada, mas,
ainda a letra O maiúscula com o zero. EN LOCATE 10,16:PRINT "Voce gan
— Confundir parênteses com os sinais sc não, uma mensagem é mostrada, e o
hou S10* LET M-M+10 :

de maior (> e menor |< ). Confundir jogo termina.


)
240 FOR D-l TO 500:NEXT
o cifrão (SI com a letra S, ou omiti-los. 250 LOCATE 5.18:PRINT " Quer te As linhas 60 a 80 escolhem três nú-
— Omitir as aspas no começo ou no ntar outra vez 7 ÍS/N) meros aleatórios, e a linha 210 converte
fim, em comando PfllNT ou LET. Omi- 260 LOCATE 12,20:PRINT "Você te esses números em caracteres (no caso
tir os dois pontos (:l entre instruções
B $";M;"" " dos computadores das linhas TRS-
270 LET K3-INKEYS:IF KS-"" THEN Color, Spectrum e MSX, naipes de ba-
— Esquecer a virgula entre dois itens GOTO 2 70 ralho) e os coloca no centro da tela. O
de uma declaração DATA, o que pode 280 IF K$-"3" OR K$-"S" THEN GO
determinar um número muito grande
Sinclair e o TRS-Color convertem esses
TO 30 números em caracteres. Os outros neces-
para o computador, ou a falta de um 290 END
item quando o computador chega ao fi- sitam de ajustes.
nal dos DATA. Na linha 220, se os três caracteres são
— Omitir um sinal de menos (em um DE iguais, você ganha o jack por (maior
programa que gera gráficos na tela, is-
Como o Apple II não tem caracteres prémio) e seu dinheiro é aumentado em
so pode resultar em uma tentativa de $50. Na linha 230 você ganha S 1 0'se dois
gráficos pré- defini d os, a versão a seguir
desenhar além dos seus limites). caracteres adjacentes são iguais (A = B
— Omitir um sinal de ponto e vírgula no faz na tela blocos coloridos (símbolos do
ou B = C), mas não ganha nada se os
final de uma linha PRINT ou colocar um caça-níqueis):
dois caracteres das extremidades são
número de espaços em branco maior
iguais. Se você não ganhar nada, o com-
ou menor do que o previsto.
putador ignora as linhas 220 e 230 e pas-
5
IIIIIIIIIIIHH«HHBBHHnHIHIIIIIIIII
sa para a 240, que provoca uma breve
pausa.
As linhas seguintes são uma outra
versão da rotina "sim/não" que checam
se você quer uma nova jogada.

Em alguns computadores você pode


uma forma
escrever a instrução IF de
muito mais poderosa, chamada de
IF...THEN...ELSE. Veja um exemplo:

10 INPUT IDADE
PRINT
20 IF I DAD E < 1 8 THEN
"MENOR DE IDADE" ELSE PRINT
"ELEGÍVEL"

Esta linha faz exatamente o que diz.


Se você tem menos de 18 anos, o com-
putador imprime "MENOR
DE IDA-
DE", mas, se você tiver 18 ou mais, ele
imprimirá "ELEGÍVEL"
Dos computadores que apresentam a
declaração IF... THEN. ..ELSE em seu
repertório de BASIC apenas os das li-
nhas TRS-80 e MSX
estão ilustrados
aqui.
Com a instrução IF... THEN. ..ELSE
o programa fica mais fácil de ler e es-
crever. No entanto, ela não é essencial.
Você pode escrever programas sem ela
se o seu computador usa apenas
IF...THEN. Existem duas maneiras de
contornar o problema. Uma emprega
IF...THEN seguido de GOTO para pu-
lar para a parte requerida do programa:

10 INPUT IDADE
20 IF IDADE<18 THEN PRINT
"MENOR DE IDADE" GOTO 30 :

25 PRINT "ELEGÍVEL"
30 ...restante do programa

Esse tipo de programação serve para


os micros que permitem comandos múl-
tiplos por linha, isto é, a colocação de
mais de uma instrução na linha do IF.
Os compatíveis com o ZX-81 não con-
tam com essa possibilidade. A segunda
solução do problema apóia-se num
IF...THEN extra para assegurar que to-
das as possibilidades sejam cobertas:

10 INPUT IDADE
20 IF IDADE<18 THEN PRINT
"MENOR DE IDADE" 10 INPUT IDADE
25 IF IDADE >-18 THEN PRINT 20 IF IDADE>=18 THEN GOTO 25
ELEGÍVEL" 22 PRINT "MENOR DE IDADE"
30 . . .restante do programa 24 GOTO 30
25 PRINT " ELEGÍVEL"
Como dois IFs demoram mais tem-
po do que um só para serem executados
(e isso é importante quando o mesmo Nas duas últimas programações, é
trecho de programa deve ser executado mais difícil entender o fluxo de desvios
muitas vezes), outro estilo de programa- do que o programa com apenas uma li-
ção de alternativas é: nha IF... THEN... ELSE.
, 1

IIIIIIIIIHIIM«os«^<> 0"ogoMMMIIIIIIHIll
Jogos com labirintos complicados
ff^iF^ilh/ík
/m~-hIi \v J/líwll exigem programas muito longos.
Mas você pode construir alguns
bem simples com pouco mais do que
LABIRINTO um laço e declarações DATA.

Jogos com labirintos exerceram sem- 150 NEXT m Isto é possível porque o TK90X nunca
pre um grande fascínio sobre usuários de 160 NEXT n coloca dois caracteres na mesma posi-
computadores, e variações do tão co- ção; então, o último toma o lugar do
9000 DATA "PPPPPPPPPPPPPPP"
nhecido "Come-come" (PacMan) con- primeiro.
9010 DATA
tinuam a aparecer constantemente no
9020 DATA
mercado.
Este artigo lhe ensina a entrar na on- 9030 DATA
da e fazer um emocionante jogo de la- 9040 DATA PP.
birinto. 9050 DATA P PPP. -
Um labirinto é inútil se não há nin-
guém ou algo para andar dentro dele.
O labirinto, nesta primeira tentativa, 9060 DATA P. . .

Então execute o programa acima para


não inclui "inimigos" ou obstáculos, 9070 DATA PP.PPPP" ver como fica e depois acione as seguin-
que exigiriam um programa bem maior. 9090 DATA P. .
tes linhas:
Mas ele mostra como fazer para que os 9090 DATA
personagens do seu jogo não atravessem 9100 DATA 50 LET x-10
as paredes e inclui também cronometra-
9110 DATA 60 LET y-14
gem, manutenção de um placar e uma 9120 DATA 1000 PRINT PAPER 6; INK 2;AT x
rotina de registro de recordes, para dar
9130 DATA y .

mais competitividade ao jogo.


9140 DATA PPPPPPPPPPPPPPP 1010 LET XX-X
1020 LET yy-y
1030 IF INKEYS-" " THEN GOTO 10
A maneira mais fácil de compreender 30
As linhas 100, 120, 150 e 160, usan-
como os jogos com labirinto funcionam 1040 IF INKEYS-"W" AND ATTR (X-
do um par dos nossos já conhecidos la-
l,y)<>9 THEN LET x-x-1
nos micros da linha Sinclair Spectrum,
como o TK90X, é ir por etapas: ços FOR. ..NEXT, determinam os limi-
1050 IF INKEYS-"z" AND ATTR tX+
tesdo labirinto. A linha 130 imprime um l,y)<>9 THEN LET X-X+l
ponto em cada posição da tela dentro 1060 IF INKEYS-"a" AND ATTR <X,
100 FOR n-3 TO 17
110 READ ã$ desses limites.
120 FOR m-7 TO 21 As linhas 1 10 e 140 lêem os dados das
130 PRINT AT n.m;"." linhas9000 a 9140 e substituem o pon-
140 IF aS(m-6)-"p" THEN PRINT to porum espaço em fundo azul, onde
PAPER li INK 1;AT n a ;

"
"
o padrão dos dados mostrar um "p".

I Labirinto
k--J
no TK-90X: com um programa bem
. .

IIIIIIIIIIIUI * PIOMAMAÇAOUJOGOS 3 J II I II

n
1 Ub PKINUrlUb UA LHIAUAU
c PI AP AQ
DF IM ARIRINITH
1 1 rnMn mdvfr uma figura.

CONSTRUA UM LABIRINTO PELO LABIRINTO


COM LAÇOS E COMANDOS DATA FACA PAREDES
CONTROLE 0 TEMPO INTRANSPONÍVEIS

Y-l)<>9 THEN LET y-y-1 3. Adicione 64 se a área em questão sáveis pela ação, e a linha final, logo
1070 IF INKEYS-"3" AND ATTR (x. é clara (BRIGHT). Neste caso, resulta- após estas.
y+l)<>9 THEN LET y-y+1 do 0. A linha 1090 ê temporária e será rees-
1080 PHINT INK 7 AT XX YV " ; .
; "
4. Adicione 128 se a área está piscan- crita depois. Seu propósito é permitir
1090 GOTO 1000 do (FLASH). No caso, resultado 0. que você rode o programa e o teste. Sem
então todos os números. O re
Some fechar o laço, o caractere se moveria
í Como todos os personagens famosos sultado será o valor de ATTR. apenas uma vez.
:
dos jogos, nosso amigo asterisco é po- A função ATTR no TK90X tem, en-
sicionado em x,y e se movimenta, aos tretanto, outros usos além de impedir
seus comandos, por uma série de linhas que o seu personagem atravesse paredes
usando INKEYS. sólidas. Para que esse jogo possa ser jogado,
Aqui, no entanto, há uma determi- Em um
labirinto maior, você pode- sem contar com "inimigos" que exigi-
nada diferença vital: ele só pode mover- ria mesma idéia para fazer com
usar a riam um programa muito complexo, o
separa uma posição se esta não for azul. que exploda ao entrar em uma zona
ele melhor é uma rotina de cronometragem
Ou seja, se ATTR não for igual a 9, sen- proibida. Paraum labirinto que use ca- e placar.
do 9 o valor numérico da cor com a qual (INK) vermelhos sobre fundo
racteres Adicione estas linhas:
você imprimiu as linhas do seu labirinto. (PAPER) vermelho, você necessitaria
No caso de você querer criar um la- uma linha começando com: 10 LET bt-100000
birinto de outra cor, veja como chegar
1F ATTR^IB THEN. .
40 LET 8-0
ao valor de ATTR: 990 POKE 23672,0: POKE 23673,0
1. Tome o valor da cor do caractere As linhas 1010, 1020 e 1080 definem 1025 IF fl-110 THEN GOTO 2000
(INK), como está no teclado do compu- a posição que o personagem acabou de 1090 IF ATTR (x.Y)<>63 THEN LE
tador — neste caso 1
deixar e apagam o ponto que ele "co- T B-S+l: SOUND .005.10
2. Tome o valor da cor da tela (PA- meu", imprimindo um espaço. Estas
PER) — neste caso — e multiplique
I
são linhas úteis em qualquer jogo, mas

por 8. Resultado, 8. note onde elas aparecem as primei-
ras linhas, antes das INKEYS, respon-
; A

J PÍOGKAMAÇÃODCJOeOS 3

2000 LET t-ÍPEEK 2 36 7 2+ 256* PEEK 1060 NEXT N


236731/50 2000 DATA AAAAAAAAAAAAAAAAAAA
2010 PRINT AT l,6;t:" SEGUNDOS 2010 DATA A AAA A
Para dar ao jogador a chance de ou- 2020 DATA A.AA.AA AA.AA.A
2020 IF t<bt THEN LET bt-t tra tentativa, use estas novas linhas. Pri- 2030 DATA A. A AAA A.
2030 PRINT AT 19,4; "Melhor temp meiro, pressione <CAPS SH1FT> e 2040 DATA A..-A.A A. A...
o: ";bt;" segundoB" <BREAK> e, então, <ENTER>:
2050 DATA A. AAA. AA. A. AA. AAA.
2060 DATA A. . .A A. . -A
Acrescentando uma linha temporá- 2040 PBINT AT 20 2 " Preasi one q
,
;

Z070 DATA AAA. .A. AAA. A. .AAA


. .

ria.Lembre-se de apagá-la depois: ualquer tecla para jogar de n 20B0 DATA AAA. .A. AAA. A. .AAA
. .

ovo .
2090 DATA A. .A
. A. ,A .

1100 GOTO 1000 2050 IF INKEYSO" " THEN GOTO 2 2100 DATA A. AAA. AA A. AA. AAA.
.

050 2110 DATA A. ..A. A A.A...A


O placar é muito simples. A
linha 40
2060 IF INKEYS-"" THEN GOTO 20 2120 DATA A. A A. A
AAA
coloca a contagem inicial em zero. A li- 60 2130 DATA A.AA.AA AA.AA.A
nha 1090 adiciona 1cada vez que o 2140 DATA A ..... .AAA . A
"Come-comc" devora mais um ponto, 2150 DATA AAAAAAAAAAAAAAAAAAA
ou melhor, sempre que ele cruza um es-
paço em que INK e PAPER são ambos OUTROS LABIRINTOS A forma do labirinto está contida nas
brancos —ATTR novamente. linhas de dados (DATA), de 2000 a
E a linha 1025, que entra em açãc 2150. Nesse estágio os limites dele são
Se você quiser tentar outros labirin-
quando todos foram comidos, faz com representados por letras "A".
tos do mesmo tamanho, pode fazê-lo,
Antes que os dados sejam lidos, a li-
que o computador verifique quanto tem- mudando o padrão de letras "p" das li-
po o jogador levou para chegar a esse nha 30 limpa a tela e a coloca na cor ver-
nhas DATA, da linha 9000 em diante.
ponto. melha, cujo código é 4. A linha 40, por
Se fizer isso, assegure-se de ter dados su-
Já a cronometragem é um pouco sua vez, coloca o asterisco na posição
ficientes para completar o labirinto ou
mais complicada. Até que você com- terá uma mensagem de erro antes que
inicial.
preenda os comandos PEEK e POKE, As linhas de 1000 a 1060 desenham
apareça na tela.
que serão explicados num artigo próxi- o labirinto na tela. Ao mesmo tempo,
mo, procure assimilar o procedimento sempre que o laço FOR.. .NEXT das li-
que se segue. nhas 1000 e 1060 é executado, o progra-
Em resumo, a linha 990 zera o reló- ma lê a próxima linha de dados
gio do TK90X ao jogar o valor 0 num Estas primeiras linhas formam o la- (DATA).
endereço de memória apropriado. A li- birinto propriamente dito: A linha 1010 lê os dados e os chama
nha 2000 conta o número de linhas for- de AS. A linha 1020 coloca-os na tela.
madas pela tela desde que o jogo come- 30 CLS4 A linha 1040 verifica a porção da me-
çou e então divide por 50 —
o número 40 LET P-297
1000 FOR N-0 TO 15
mória da máquina que corresponde a
de linhas por segundo em um televisor. cada posição de tela. Se o endereço de
1010 READ AS memoria contém o número 65, temos
Ao mesmo tempo, a linha 10 deter- 1020 PRINT #(N*32)+6.AS:
mina o "melhor tempo" inicial em 1030 FOR M-0 TO 18
um "A" na tela, e ele é mudado para
100000, muito mais que qualquer um le- 1040 IF PEEK(1024+{N*32)+6+M)=6 um bloco azul (código 175). As linhas
varia, de forma que ele será batido. A 5 THEN POKE(1024+fN*32)+6+M) .17 1030 e 1050 fornecem o íoop com que
linha 2020 compara o novo tempo com
; ; (( ; ; ; ;
;; : ;

3 PROGRAMAÇÃO DE JOGOS 3

a linha 1040 verifica todas as posições 20 LET FA-999999 apaga o asterisco.


da tela. 50 RESTORE Adeclaração TI = TIMER/50 na li-
Agora adicione essas linhas e você 60 LET D-0 nha 1 190 pára o relógio e divide o que
1070 TIMEH-0
poderá deslocar um homenzinho pelo la- estásendo lido por 50, para transformá-
1140 IF PEEK (1024 + P) -110 THEN P
birinto.
LAY "T80B" LET D-D+l
:
lo em segundos.
1160 IF D-153 THEN GOTO 1180 Aslinhas 1200e 1210 mostram o tem-
1080 PRINT #P. "*" 1180 PRINT §P " " ,
po na tela.
1090 LET LP-P 1190 TI-TIMER/50 A linha 1220 checa se o melhor tem-
1100 IF PEEK ( 340) -247 AND PEEK (
IINT §52 "TEMPO-"
1200 PRI1 ,
po (FA) é maior que o obtido na última
1023+P)<>175 THEN LET P-P-l 1210 PRI1
1INT §84 .TI "SEG " ;

contagem. Se for, ele é igualado a este.


1110 IF PEEK 338) -247 AND PEEK
(
1220 FA>TI THEN FA=TI As linhas 1230e 1240 mostram o melhor
1025+P)<>175 THEN LET P-P+l ÍINT §212, "MELHOR TEMPO"
1230 PRII
1120 IF PEEK (338) -251 AND PEEK tempo, antes que uma mensagem oriente
1240 PRII
II NT §244. FA; "SEG "
o jogador a teclar <ENTER> para re-
992+P)<>175 THEN LET P-P-32 1250 PBUNT §340, "PRESSIONE"
1130 IF PEEK(342}-253 AND PEEK 1INT §372 "<ENTER>" . começar
1260 PRII
1056+P)<>175 THEN LET P-P+32 IINT §404."PAHA COMEÇAR";
1270 PRII Alinha 1290 aguarda, até que uma
1150 PRINT 6LP, " ' 1280 PRÍINT §436. "DE NOVO" tecla seja pressionada, e a 1300 verifica
1170 GOTO 1080 1290 LET INS-INKEYS IF IN$-"" T :
se foi < ENTER > Neste caso o jogo
.

HEN GOTO 1290 recomeça. O RESTORE na linha 50 per-


Esta parte do programa permite que 1300 IF INS-CHRS (13) THEN GOTO mite que os dados (DATA) possam ser
você mova o seu caractere pelo labirin- 40 lidos novamente. Se < ENTER > não
to. Ela tem algumas particularidades. O 1310 GOTO 1290 foi teclada, o computador continua es-
homem só pode ser movimentado se o Quando você executa este programa perando outra entrada.
ponlo para onde se quer levá-lo não con- pode verificar à direita do labirinto o A tecla < BREAK > , finalmente, ter-
tém um bloco azul. A linha 1 100 verifi- tempo gasto para remover os pontos e mina o jogo.
ca o conteúdo de duas posições de me- também o melhor tempo.
mória: a que corresponde á tecla "Z" Inicialmente, o melhortempo é co- CONSTRUA SEUS PRÓPRIOS LABIRINTOS
e a que corresponde à posição de tela em locado em 999999 segundos pela linha
que o homem vai entrar. Se a tecla "Z" 20. A
linha 60 zera o placar, e a linha Use papel quadriculado para dese-
(código 223) está sendo pressionada e o 1070 zera o "cronometro". nhar seus labirintos. Tenha sempre em
endereço de tela não contém um bloco A linha 140 examina a posição em
1 mente o tamanho da leia do computa-
azul (código 175), então ele pode se mo- que o asterisco está, para ver se há um dor: 32 por 16 caracteres.
vimentar. ponto. Em caso positivo, o comando Desenhado o novo labirinto, altere o
Asteclas para controle de movimen- PLAY é usado para emitir um "blip" conteúdo das linhas DATA. Se o novo
to são as mesmas já utilizadas: "Z" pa- enquanto o ponto é apagado. Ela tam- labirinto for maior ou menor que o an-
ra a esquerda, "X" para a direita, "P" bém adiciona um ponto a D, que con- tigo, você terá que modificar o tamanho
para cima e "L" para baixo. Tente an- tém o número de pomos "comidos". do laço FOR...NEXT (linhas 1000 e
dar com o asterisco pelo labirinto de for- A linha 160 verifica se não há mais
1 1030). Conte quantas linhas o novo la-
ma que os pontos sejam apagados. pontos na tela. Se estes terminaram, o birinto ocupa e subtraia Coloque o
l . re-
Acrescente estas linhas e marque o tem- programa pula para a linha 180, que 1 sultado no lugar do último número da
po- necessário para "comer" os pontos:
IIIIIIIIIIIHI 3 P100UMAÇÃ0DEJ0G0S 3 |H||||||||
linha 1000. Da mesma forma, taça a 60 VPOKE BASE(6)+31.170
contagem do número de posições da pri- 160 VPOKE BASE(5)+P.ASC("*")
190 LET LP-P
meira linha e subtraia 1. Coloque, em
As linhas de dados (DATA), de 1000 195 KS-INKEYS:1F K$-"" THEN 195
seguida, esse número no lugar de 18 no 200 IF KS-CHRS(29) AND VPEEK (BA
a 1150 encerram a forma do labirinto.
fim da linha 1030. SE(5)+P-1)<>6 THEN LET P-P-l
Os limites deste são representados por
Finalmente, conte quantos pontos 210 IF KS-CHRS(28) AND VPEEK (BA
letras "A".
existem no seu novo labirinto. Se encon-
Antes que os dados sejam lidos, a li-
SE(5)+P+l)OB THEN LET P-P+l
trar um número diferente de 153, altere 220 IF KS-CHRS(30) AND VPEEK (BA
nha 10 limpa a tela, introduzindo-a no "

a linha 1 160 também, substituindo 153 SE<5)+P-32)<>8 THEN LET P-P-32


modo gráfico de 32 colunas (comando 230 IF KS-CHRSOl) AND VPEEK (BA
pelo novo i
SCREEN), e fixa a cor de fundo e de SE{5)+P+32)<>8 THEN LET P-P+32
frente (comando COLOR). A linha 40 250 VPOKE BASE(5)+LP,255
define a posição inicial do "Come- 270 GOTO 180
come" (que será representado por um
Estas primeiras linhas constituem o asterisco). O movimento do caractere pelo labi-
labirinto propriamente dito: As linhas de 100 a 160 desenham o rinto só é possível se o ponto para onde
labirinto na tela. Sempre que o laço se quer levá-lo não contém um bloco
10 SCREEN ltCOLOB 1.3,3 FOR.. .NEXT das linhas 100 e 160 é exe- azul.A linha 200 verifica se uma tecla
40 LET P-247 cutado, o programa lê a próxima linha foi apertada e qual é o conteúdo de duas
70 VPOKE BASE(6)+5.26 de dados (DATA). A linha 10 lê os da-
1 posições de memória: a que correspon-
80 VPOKE BASE (6) +1 102 ,
dos, denominando-os de A$. A linha de à tecla de movimentação do cursor
90 LOCATE 0,3
120 coloca-os na leia. "flecha para baixo" e a que correspon-
100 FOR N-0 TO 15
110 READ AS Todos esses pontos e letras "A" com- de à posição de leia em que o homem
120 PRINT TAB 4 .AS )
binados não formam, contudo, um la- vai entrar. Se a tecla (código 29) está
130 FOB M-0 TO 18 birinto de verdade. Assim, a linha 140 sendo pressionada, e o endereço de tela
140 IF VPEEK<BASE(5)+102+N*32+M verifica aporção da memória da máqui- não contém um bloco azul (código 8),
)-65 THEN VPOKE BASE (5) +102+N*3 na que corresponde a cada posição de ele pode se movimentar.
2+M.B com a função VPOKE
tela. Isso é feito As teclas para controle de movimen-
150 NEXT H BASE (5), que torna acessível a memó- to são as usadas para a movimentação
160 NEXT N ria dedicada de vídeo do MSX, na cha- do cursor (marcadas com as flechas nas
1000 DATA AAAAAAAAAAAAAAAAAAA mada página 5. Se o endereço de memó- quatro direções). Experimente deslocar
1010 DATA A AAA A
1020 DATA A.AA.AA AA.AA.A ria contém o número 65 isso quer dizer
, o asterisco e "comer" (apagar) os pon-
1030 DATA A. A AAA A. que temos um "A" na tela e ele é mu- tinhos.
1040 DATA A. -A. A. A. A. . . dado para um bloco azul (código 8). As Adicione estas linhas e marque o tem-
1050 DATA A.AAA.AA.A.AA.AAA.A linhas 130 e 150 fornecem o laço que po para "comer" os pontos:
1060 DATA A. A . . A. .A . permite que a linha 140 verifique todas
1070 DATA AAA .A. AAA. A
. . .AAA . .
as posições da tela. 20 FA-999999!
1080 DATA AAA. .A. AAA. A. .AAA
. .
Agora adicione estas linhas e deslo- 30 RESTORE
1090 DATA A. .A . A. -A .
que um homenzinho pelo labirinto. 50 LET D-0
1100 DATA A.AAA.AA.A.AA.AAA.A
170 TIME-0
1110 DATA A... A. A A. A. -A .
240 IF VPEEK(BASE(5)+P)-46 THEN
1120 DATA A. A AAA A.
1130 DATA A.AA.AA AA.AA.A
IIIIIIIIIIMM ' PIOGIAMAÇÃOKJOGOS 3 »H||||||||||
SOUND 7, 7: SOUND 6 . 0 : SOUND 8,15 melhor tempo (FA) é maior que o tem- 2020 DATA "A.AA.AA AA.AA.
:SOUND 8.0: LET D-D+l po obtido na última contagem. Se foi, A"
260 IF D-153 THEN GOTO 280 ele é igualado a este último. A linha 320 2030 DATA "A. A AAA A.
280 VPOKE BASE(5}+P,255 mostra o melhor tempo, antes que uma A"
290 LET TI-INTtTIME/50) 2040 DATA "A. . .A. A A. A. . .

300 LOCATE ?.1:PRINT "TEMP0-";T


mensagem diga ao jogador para recome-
A"
I : " SES "
çar, teclando < ENTER > 2050 DATA "A. AAA. AA A. AA. AAA. .

310 IF FA>TI THEN FA-TI A


linha 390 aguarda até que uma te- A"
320 LOCATE 3,20:PRINT "MELHOR T cla tenha sido pressionada, e a linha 400 2060 DATA "A. . .A A. . .

EMPO-" FA: "SEG " :


verifica se foi < ENTER
>. Neste caso, A"
330 LOCATE 7,21:PRINT "Aperte R o jogo recomeça. O
RESTORE na linha 2070 DATA "AAA. . .A. AAA. A. . .AA
ETURN " ; 30 permite que os dados (DATA) pos- A"
390 LET KS-INKEYS:IF KS-"" THEN sam ser lidos novamente. Se alguma te- 20B0 DATA "AAA . . .A. AAA. A . . . AA
390 cla diferente de < ENTER > foi pressio- A"
400 IF KS-CHRS(13) THEN GOTO 30 nada, o computador continua esperan-
2090 DATA "A. . .A A. . .

410 GOTO 390 A"


do outra entrada. 2100 DATA "A AAA AA A AA AAA
comando < CTRL >< STOP
. . . .

O
.

O tempo gasto para remover os pon- A"


encerra o j 2110 DATA "A. ..A. A A. A...
tos,assim como o melhor tempo, é mos-
A"
trado ã direita do labirinto, quando vo-
2120 DATA "A. A AAA A .

cÊ executa esteprograma. De início, o A"


melhor tempo é colocado em 999999 se- 2130 DATA "A.AA.AA AA.AA.
Estas primeiras linhas formam o
gundos pela linha 20. A linha 50 zera o
la-
A*
birinto propriamente dito:
placar, e a linha 170 zera o "cro- 2140 DATA "A AAA
nometro" 30 HOME GR :
A"
linha 240 examina a posição em
A 40 LET M • 18: LET N = 4 2150 DATA " AAAAAAAAAAAAAAAAAA
que o asterisco está, para ver se há um 1000 FOR I = 0 TO 15 A"
Em
ponto. caso positivo, o comando 1010 RE AO AS Os limites do labirinto são represen-
SOUND é usado para emitir um "blip" 1020 FOR J - 1 TO 19 tados, neste estágio, tal como em exem-
enquanto o ponto é apagado. Ela tam- 1025 IF MIDS (AS.J.D - "A" T
plos anteriores, por letras "A". Da mes-
bém acrescenta um ponto a D, que con- HEN COLOR- 3: PLOT 2 * J 2 * I .

PLOT 2«J+1.2*I:
PLOT 2 ma forma, seus contornos estão conti-
tém o número de pontos "comidos". A :

* J.2 * I + 1: PLOT 2 * J + 1,2 dos nas linhas de dados (DATA), de


linha 260 verifica se não há mais pon- 2000 a 2150. Portanto, o programa só
* I + 1
tos na tela. Se estes terminaram, o pro- - "." T
1030 IF MIDS (AS.J.D
grama pula para a linha 280, que apaga HEN COLOR- 12: PLOT 2 * J.2 *
o asterisco. Acionamos aqui o coman- I
do VPOKE, como acima. 1050 NEXT J
A declaração TI = INT(TlME/50), 1060 NEXT I
agora na linha 290, pára o relógio e di- 2000 DATA "AAAAAAAAAAAAAAAAAA
vide o que está sendo lido por 50 para A'
iransformá-lo em segundos. A linha 300 2010 DATA
mostra o tempo na tela..
A linha 310, por sua vez, checa se o
) "

IIIIIIIIIIlHi » PROG1AMACA0DUOG0S 3 IHIIIIIIIIIII


funcionará se forem adicionadas essas nho) não deve conter nenhum bloco de A linha 1200 mostra o tempo na tela
linhas. É relativamente fácil alterar a cor 12. (que é convertido para segundos
forma para um novo labirinto: basta A linha 1100, por exemplo, verifica dividindo-se FA por 50).
modificar as linhas de 2000 a 2150. o conteúdo de duas posições de memó- A linha 1210 checa se o melhor tem-
Antes que os dados sejam lidos, a li- ria: a que corresponde à tecla "Z" e a po (FA) é maior que o tempo obtido na
nha 30 limpa a tela e a coloca num mo- que corresponde à posição de tela em última contagem. Em caso positivo, ele
do gráfico de baixa resolução. A linha que o homem vai entrar. Se a tecla "Z" é igualado a este último. A linha 1220
40 coloca o asterisco na posição incial. (código 218) está sendo pressionada, e mostra o melhor tempo, antes que uma
As linhas de 1000 a 1060 desenham o endereço de tela não contém um blo- mensagem diga ao jogador para teclar
o labirinto na tela. A cada vez que o la- co gráfico, então ele pode se movi- <ENTER> para recomeçar (na linha
ço FOR...NEXT das linhas 1000 e 1060 mentar. 1230).
é executado, o programa lê a próxima As teclas para controle de movimen- A linha 290 aguarda até que uma te-
1

linha de dados (DATA). linha 1010 A to são as mesmas já utilizadas anterior- clalenha sido pressionada, e a linha
lê os dados, e os chama AS. linha A mente: "Z" para a esquerda, "X" pa- 1300 verifica se foi <ENTER>. Neste
1025 coloca-os na tela, na forma de qua- ra a direita. "P" para cima e "L" para caso, o jogo recomeça. RESTORE na
O
dradinhos coloridos (cor= 3 onde hou- baixo. linha 50 permite que os dados (DATA)
ver a letra A, e cor= 12 em outros Marque o tempo necessário para possam novamente. Caso tenha
ser lidos
pomos). "comer" todos os pontos, acrescentan- sido acionada uma tecla que não < EN-
Agora adicione estas linhas e v c pO- do estas linhas: TER > , o computador continua à espe-
derá deslocar, mais uma vez, i
ra de outra entrada. A tecla <CTRL-
menzinho pelo labirinto. 20 LET FA - 99999 C> termina o jogo.
50 RESTORE
1080 COLOR- li PLOT 2 * M.2 * 60 LET D - 0
N: PLOT 2 * M 1,2 N: PLOT 2 1070 LET TI - 0
« M.2 * N + 1: PLOT 2 * M + 1, 1140 IF SCRN< 2 • M, 2 * N> -
2 * H + 1 12 THEN LET W - PEEK - 1633 (

1090 LET PM - M: LET PN - N 6) LET D - D + 1


:

1100 IP PEEK - 16384) - 218


t
1150 COLOR- 0: PLOT 2 * PM. 2 *
AND SCRN( 2 * (M - 1) .2 « N) PN: PLOT 2 * PM + 1,2 * PU: PL
< > 3 THEN LET M - M - 1 OT 2 " PM 2 * PN + 1: PLOT 2 *
T
CONVERSÃO DO COLOR
1110 IF PEEK - 16384) - 216
( PM + 1,2 * PN + 1 PARA O TRS-80
AND SCHN! 2 * (M + 11,2 * N) 1160 IF D - 153 THEN GOTO 118 Os micros TRS-80 e TRS -Color têm
< > 3 THEN LET M - M + 1 0 interpretadores BASIC simitares, no
1120 IF PEEK - 16384) - 208
(
1170 GOTO 1080 que diz respeito ao núcleo básico de co-
AND SCRNÍ 2 *M,2 * (N- 1)) 1180 COLOR- 0: PLOT 2 * M,2 * mandos, funções e declarações. Por is-
< > 3 THEN LET N - N - 1 N: PLOT 2*M+1,2*N: PLOT 2 so, é fácil converter programas de um
1130 IF PEEK - 16384) - 204 * M,2 * N + 1: PLOT 2 * M + 1,
( modelo para outro. As maiores diferen-
AND SCBNÍ 2 • M, 2 * (N + 1) 2 • N + 1
ças residem nos comandos de alta re-
< > 3 THEN LET N - N + 1 1200 HTAB 9: VTAB 21: PRINT "S solução gráfica, cor e som. Os
1150 COLOR' 0: PLOT 2 * PM, 2 * eu tempo foi de ";TI / 5;" seq" comandos CLS (limpa telas), SET e
PN: PLOT 2 * PM + 1,2 * PN: PL 1210 IF FA > TI THEN LET FA - POINT (pontos gráficos de resolução
OT 2 * PM, 2 * PN + 1 PLOT 2 * :
TI média) e PRINT@ são semelhantes nas
PM + 1 , 2PN +
* 1 1220 HTAB 11: VTAB 22: PRINT " duas linhas. As diferenças de sintaxe
1170 GOTO 1080 Melhor tempo: " FA / 5;" seg"
;
do TRS-80 em relação ao Color são: o
1230 HTAB 6: VTAB 23: PRINT "P CLS, o SET e o POINT não tém parâ
Esta parte do programa dá a você a reaslone RETURN para cont inuar metro indicativo de cor de fundo (tela
possibilidade de movimentar o caracte- 1240 GET TS: IF ASC (TS) < > de texto), e as locações de tela usadas
re pelo labirinto.Para que haja movi- 13 THEN GOTO 1210 com o PRINT@ produzem resultados
mento, porém, o ponto para onde se 1250 GOTO 40 diferentes.

quer levar o caractere (nosso homenzi-


A tela do Color tem dezesseis linhas
De início, o melhor tempo é coloca- por 32 colunas, e a do TRS-80, dezes-
do em 999999 segundos pela linha 20. seis linhas por64 colunas. Como as po-
A linha 60 zera o placar e a linha 1070 sições de tela usadas pelo PR1NT@ são
zerao "cronometro". A linha 1095 au- numeradas sequencialmente, um
menta uma posição no cronometro. A PRINT@ 162, por exemplo, escreverá
na segunda coluna da sexta linha do
linha 40 examina a posição em que o
1 1

TRS-Color, e na 32." posição da tercei-


asterisco está. Ela também adiciona um
ra linha, no TRS-80.
ponto a D, que contém o número de Há uma forma simples de converter
pontos que foram "comidos". comandos PRINT@ doColor para o
A linha 160 verifica se não há mais
1 TRS-80: se N for a locução de tela do
pontos na tela (em número de 153). Se Color, sua correspondente no TRS-80
estes terminaram, o programa pula pa- será
ra a linha 80, que apaga o asterisco.
1 1
INTÍN/32)*64+H-32
para a segunda linha em diante (a que
começa na posição 32 do Color), Se
N < 32, não há necessidade da fórmu-
la acima: a locução de tela do TRS-80
será o próprio N.
IIIIIIIIIIIUHHB ' "<""'«» ' MHHIIIIIIIIIII

COMO DESCOMPLICAR APRENDA A CONECTAR

COMANDO
0 GRAVADOR
DE GRAVAÇÃO
VERIFIQUE SUAS FITAS

SAVEs E LOADs COMANDO DE LEITURA

Qualquer criança é capaz de fazer


funcionar um gravador. Quando
se traia de conectá-lo ao computador,
porém, as coisas podem se

complicar. Saiba como sair dessa,


começando por ajustar os controles.

Alguns problemas podem surgir


quando quer gravar ou carregar pro-
se
gramas com um gravador cassete. As
causas desses problemas nem sempre são
identificáveis. Mas é possível estabele-
ceralgumas rotinas que diminuam as
margens de erro.

SAIBA CONECTAR CORRETAMENTE

Alguns micros empregam um grava-


dor especial do tipo digital, que tem uma
ligação única e direta com a máquina;
essa característica elimina qualquer pro-
blema na instalação. Mas a maioria dos
computadores pode ser ligada a um gra-
vador cassete, frequentemente utilizan-
do mais que um tipo de cabo. Normal- peciais, como filtros c sistemas de redu- gravador adequado ao seu tipo de com-
mente, a ligação é feita por meio de um ção de ruído (Dolby), etc. Ajuste o con- putador. Se, depois disso, ele continuar
plugue do tipo DIN ligado a três plugues trole de tonalidade para o máximo de sem funcionar, procure o seu re-
de pino {jaques), mas pode-se encontrar agudos (a tonalidade é controlada ou vendedor.
também um conector Dl D em cada uma por um dial numerado, ou por um in- Quando tiver encontrado um volume
das pontas, com ou sem jaques em pa- terruptor de duas posições grave/agu- que permita o carregamento, observe a
ralelo. Se você comprar um cabo ou usar do). Deixe a tonalidade assim sempre posição do controle, estabeleça os limi-
um próprio para áudio, assegure-se de que você usá-lo com o computador. Es- tes superior e inferior com os quais vo-
que ele é adequado: caso não seja, apa- colha um volume médio (entre 50 e 60% cê consegue carregar o programa e mar-
recerão problemas como interferências do máximo) e tente carregar (com os co- que o ponto médio para uso posterior.
em cabos não blindados. mandos LOAD, CLOAD, etc, depen- Você pode usar o mesmo volume para
Se você usa o gravador com frequên- dendo do computador) um programa já gravação, mesmo porque muitos grava-
aconselhável deixar o cabo perma-
cia, é gravado, como por exemplo o da fita de dores têm um controle automático des-
nentemente ligado dos dois lados. demonstração que acompanha sua má- se volume.
quina. Se o programa não carrega, au- Para testar se o volume é adequado
mente o volume pouco a pouco e repita para gravação, limpe a memória do
AJUSTE OS CONTROLES a operação, até conseguir um bom re- computador (digite NEW e pressione
sultado. <ENTER> a seguir) e digite este pe-
O passo inicial e mais importante na Se você alcançar o volume máximo queno programa.
adequação com o computador é ajustar ainda sem sucesso, volte o seletor até um
os controles de volume, tonalidade e ou-
tras características
cê tem um
do gravador. Se vo-
gravador especial para com-
ponto levemente abaixo daquele em que
você começou e repita toda a operação,
diminuindo o volume aos poucos.
L2M1MQQ55
10 BEM TESTE DE GRAVAÇÃO
putadores, siga as instruções que o Caso o programa não carregue em 20 REM
acompanham. nenhum nível de volume, verifique as 30 REM
Se seu gravador é do tipo comum, co- conexões novamente. Tente outro cabo 40 REM
mece desligando todos os controles es- ou outra fita, ou peça emprestado um 50 REM FIM DO TESTE
"

IIIIIIIIHlimMI^HHBHHBHIIIIIIIIII!
Siga então a rotina para gravação no máximo permitido para uma linha no
computador, acionando SAVE ou CSA- seu computador. Na maioria das máqui-
VE. Ao carregá-lo (comando LOAD ou nas, esse tamanho é de dez caracteres no
CLOAD) e listá-lo (LIST) você obterá máximo. Outros computadores, como o
o programa de volta. TRS-80, permitem apenas uma letra ou
símbolo de identificação do programa:
quando o nome é maior, os comandos
0 COMANDO DE GRAVAÇÃO CSAVE e CLOAD reduzem-no à pri-
EXTERMINADOR DE PROBLEMAS meira letra.
— Utilize um gravador cassete mo- O comando de gravação de fita não
noaural (isto ó, que não seja estéreo),
é um comando padrão do BASIC, va- SAVE "NOMEPROG01"
de marca confiável e, se possível,
riando muito entre os computadores. A SAVE "NomeProgOl"
reserve-o para uso exclusivo com o CSAVE "FI-
maneira correta de manipulá-lo é geral-
computador. Ligue-o sempre ã rede elé-
trica. ao invés de usar pilhas, para as-
mente explicada no manual que acom- DOS computadores considerados
segurar uma rotação uniforme do panha o micro. Alguns passos iniciais, com Apple
aqui, apenas os compatíveis
porém, são importantes. II não exigem aspas.
— Evite usar aparelhos estereofóni- Antes de gravar qualquer programa, Os exemplos de comandos SAVE aci-
cos, a não ser que todos os seus recur- coloque uma fita de boa qualidade no ma são válidos, mas um deles usa letras
sos especiais possam ser desligados. gravador, tendo o cuidado de rodá-la maiúsculas e minúsculas. Se você
— Use fitas magnéticas para áudio
um pouco para que a guia de plástico misturá-las num nome de programa, de-
transparente, existente no começo (lea- ve fazer o mesmo quando quiser carre-
de boa qualidade ou especiais para da-
dos. Uma fita de má qualidade não re- der), não fique em contato com o ca- gar o programa.
sistirá por muito tempo a várias regra- beçote.
vações. A seguir, escolha um nome adequa-
SAVE "NOME PROG"
do para seu programa. Os dados são ar-
.

— Procure instruções especificas na SAVE "NOME /PROG"


tela;o gravador deve ficar com a tecla mazenados na forma de "arquivos" de
SAVE "NOME PROG) {

PLAV acionada até que a operação de um tipo ou outro, independentemente


carga esteja completada. do método real de armazenamento.
s características de tona-
Mas, para gravações feitas em fita, no-
lidade, volume e outros controles se a mes especiais são empregados com o co-
carga do programa não for bem-su- mando SAVE, de modo a identificar na
cedida. fita qual o programa gravado (isso é útil
para achar automaticamente o progra-
— Afaste o gravador da TV ou mo- ma, depois, através do comando
nitor se um programa que já carregou LOAD).
uma vez não funcionar. Tente também
a gravação do programa para
O nome do arquivo ou programa po-
ver se funciona. Em caso afirmativo, a de ser qualquer combinação de caracte-
primeira fita deve tef sido danificada. res ou símbolos contidos no tamanho

— Se for necessário ajustar o volu-


me com frequência, de programa para
programa, marque o volume adequado
na etiqueta da fita.
— Guarde suas fitas em lugar
livre de poeira e longe de fontes eletro-
magnéticas e do calor.

Se o seu computador está ligado ao


controle remoto do gravador, ligue os
controles para gravação, digite o nome
do programa desejado após o comando
SAVE e tecle < ENTER > ou <RE-
TURN>. O computador assumirá o
controle do gravador até que a opera-
ção de gravação esteja completada.
Se o controle é manual, digite o co-
mando SAVE e o nome do programa,
coloque o gravador em funcionamento
7 PLDGUE DE 7 PINOS DIN e então tecle < ENTER > ou <RE-
TURN > Espere até que o sinal de
.
Illlllllllll IMF
prontidão reapareça na tela e desligue
o gravador.
O (empo exigido para o carregamen-
to de um programa depende de dois fa-
tores: seu tamanho, em termos de uso
de memória, e a velocidade do fluxo de
dados entre o gravador e o computador.
Esta é fixa em alguns equipamentos e
variável em outros.

Eis aqui dois tipos de


cabo que você pode utilizar
para conectar o seu computador
a um gravador. Verifique em «eu
manual a disposição correia
pinos (canto inferior esquerdo).

nome indicado juntamente com


LOAD. Quando esse nome for e
trado, os dados que o seguem p
tomaticamente carregados na memória
do computador. Em muitos tipos de
computador, o processo de leitura po-
de ser acompanhado na tela de vídeo por
meio de indicadores. Na linha TRS-8"
VERIFY "NOMEPROG01"
pio. aparece um asterisco pis-
cando no canto superior direito da tela.
O computador lê o programa da fita Em outras, o número de bytes ou de blo-
e o compara com aquele que está na me- cos de bytes lidos é mostrado conti-
mória. Se houver falha, aparecerá na te- nuamente.
la uma mensagem de erro. Se o gravador está ligado ao contro-
Os computadores da linha TRS-Í le remoto, a fita estaca ao final do pro-

usam o comando CLOAD? para a ta- cesso de carregamento, mas você ainda
refa de verificação. Outros micros, po- precisa apertar a tecla STOP no grava-
rém (como os compatíveis com o Sin- dor. Se o controle é manual, simples-
clair ZX-81), não têm qualquer função mente aperte STOP quando o cursor
de verificação. Recorra, nesse caso, a reaparecer na tela. Evite que a tecla
programas de revistas especializadas ou PLAY fique acionada desnecessaria-
vendidos à parte. mente, porque isso pode provocar o des-
As gravações mais confiáveis são fei-
gaste prematuro ou deformação da po-
tas na velocidade mais baixa. Altas ve-
lia tratora.
locidades usam menos fita e, obviamen- 0 COMANDO OE LEITURA LOAD
Quando você usar o comando
te, operam mais rápido. Nesse caso é im-
ou equivalente, o programa que for car-
portante usar fitas de alta qualidade. Se você começar com programas pre- regado tomará o lugar de qualquer ou-
gravados, seus primeiros problemas tro que esteja na RAM
(Memória de
VERIFIQUE AS GRAVAÇÕES rão com o comando de leitura (LOAD) Acesso Randômico) do computador.
Podem existir várias formas do coman Por isso, assegure-se de ter gravado o
do LOAD, mesmo para uma única má programa resistente na memória antes
Uma maneira de verificar se um pro-
quina. Eis uma delas: de carregar o próximo.
grama foigravado adequadamente é
carregá-lo e executá-lo. Quando a gra- Rebobine a fita até o início do pro-
LOAD "NOMEPROG01" grama-teste que foi apresentado lá em
vação é imperfeita o programa que está
na memória (e que você quer gravar) é Outros computadores utilizam a for- cima, e tente carregá-lo (LOAD) usan-
substituído por aquele que está na fita, ma CLOAD (linha TRS-80), LOADA do o nome que você escolheu. Em caso
e a gravação se perde. Se esta tiver sido ou LOADT (TK-2000), etc. de dificuldade, consulte o guia de reso-
bem-sucedida, não haverá problemas. O comando LOAD deve reproduzir lução de problemas, neste artigo.
Muitos computadores contornam es- o nome utilizado para gravação (SAVE) Outras formas do comando LOAD
sa dificuldade fornecendo um comando e verificação (VERIFY). Para que o são necessárias para tornar acessíveis da-
verificador (por exemplo, VERIFY). O computador leia os sinais da fita mag- dos em código de máquina (por exem-
seu uso exige o rebobinamento da fita nética, basta digitar LOAD e pressionar plo, BLOAD), para realocar programas
até o início do programa. Então a tecla PLAY do gravador. Ele procu- e para juntar um programa a outro
executa-se o comando usando o mesmo rará pelo nome do programa e mostra- (MERGE). Seu primeiro contato com
nome que se deu ao programa ao gravá- rá todos que encontrar pelo caminho, elas pode ter sido em instruções de jo- i

lo. Por exemplo: até encontrar aquele que confere com o gos comprados ao acaso.
CÓDIGO DC MÁQUIN
mu

Os circuitos internos dos computado-


res utilizam, como vimos, apenas núme-
ros binários para realizar operações arit-
méticas. Ora, esse sistema de numera-
ção, composto dos dígitos 0 e 1, cria
uma série de dificuldades de compreen-
são e manipulação para os operadores.
Em primeiro lugar, os números biná-
rios de oito e dezesseis bits (os mais usa-
dos em microcomputadores) tornam-se
confusos e difíceis de reconhecer, com
tantos Os e ls. Digitá-los. no computa-
dor é uma empresa difícil, sujeita fre-
quentemente a erros e incorreções.
A maneira de contornar esses proble-
mas consiste em fazer com que o ope-
rador ou programador em nível de má-
quina passe a utilizar um sistema numé-
rico com outra base, mas que ainda se-
ja próximo, em concepção, ao sistema
binário utilizado pelo computador.
O sistema universalmente adoiado
para isso é o hexadecimal (ou hexa), no
qual os números utilizam a base 16. E
por que o hexa funciona tão bem com
computadores?
Antes de mais nada, ele está suficien-
temente próximo do decimal para ser to-
lerado por nós, simples mortais. Mas,
além disso, 16 é uma potência de 2 (co-
mo 8 também o é, em outro sistema
muito usado com computadores, o oc-
tal). Isso significa que a conversão en-
tre os sistemas —binários e hexa —
nos ,

dois sentidos, é bem mais simples do que


entre o primeiro e o sistema decimal.
A única dificuldade é que um siste-
ma com base maior do que 10 precisa
criar novos algarismos, além dos que
existem entre 0 e 9. No sistema hexade-
cimal utilizam-se letras adicionais (sem-
pre em maiúsculas). O
10 decimal é re-
presentado por A, o 1 1 por B, o 12 por
C, o 13 por D, o 14 por E e o 15 por F.
Tudo se passa como se tivéssemos oi-
to dedos em cada mão. Essa imagem po-
de parecer estranha ou mesmo mons-
truosa, pois dificilmente suportamos al-
terações em nossa aparência física. Na
prática, porém, é isso que acontece.

COMO CONVERTER BINÁRIO EM HtXA

[ A conversão de números binários de


I oito bits (os mais utilizados em compu-
; ; ; ; : : " ; ;

mu DIGODÍMAQ

Se todos tivéssemos dezesseis dedos, POR QUE 0 SISTEMA HEXADECIMAL


o sistema numérico mais comum seria HEXADECIMAL É UTILIZADO CONVERSÕES FÁCEIS DE
certamente o hexadecimal. Embora isso CONTANDO DE 16 EM 16 BINÁRIO PARA HEXA

não aconteça, esse sistema é


A RELACÁO ENTRE OS CONVERSÃO DE DECIMAL
fundamental para o código de máquina.
SISTEMAS BINÁRIO E PARA HEXA

[adores pessoais) para o sistema hexa- N-0


decimal é bastante fácil. Primeiro, vo- 210 PHINT @125-XM,N;
cê divide o número binário em duas par-
220 IF N-l THEN N= INT ( 2 * X ) NS-S :

THS IN) :NS-MIDS (NS 2 LEN (NS) "D E


tes de quatro bits cada. Em seguida, ca-
. ,

LSE NS=RIGHTS<" 0".LEN<STP.S12-


da uma dessas partes é transformada em X) )-l)
um digito hexadecimal. O número hexa 230 PRINT ê255-XM-LEN[NS) .NS;
final é composto por esses dois dígitos. 240 NEXT
Da mesma forma, converte-se um nú- 250 PRINT #279." - ";MID$(STHS(
mero binário de dezesseis bits hexa N0)+" '.2,3) ;
dividindo-o em quatro segmenlos de 260 RETURN
quatro bits cada. 270 FOR X-7 TO 4 STEP -1
Já a conversão de decimal para hexa 280 PRINT #374-X*3, STRS (NO AND (

2"X) 716)
é mais complicada, embora não seja tão
290 NEXT
difícil que você não possa realizá-la. Pa-
300 PHINT #367.HEXS<NO/16)
ra se fazer isso, você precisa dividir o
310 FOH X=3 TO 0 STEP -1
número decimal por 16, sucessivamen- 320 PRINT #378-X*3.STP.$(NO AND
te. Os restos dessa divisão formarão os 2"X> i

dígitos do número em hexa. 330 NEXT


Quando se divide o decimal 1226 por 340 PRINT #383.HEXS(NO AND 15);
16, o resto será 10. O
10 decimal é A em 350 POKE 1488.PEEKU391) POKE 1 :

hexa. O resultado da divisão (76) é di- 489, PEEKU407)


vidido, por sua vez, por 16, e dá 4, com 360 RETURN
370 NU$-"":PRINT #439."?";
resto de 12 (C em hexa). Finalmente, 4
380 IN$-INKEYS:IF(INS<"0" OR IN
dividido por 16 dá zero, com 4 de res-
S>"9") AND INSOCHRS (13) THEN G
to. Conclusão: 1226 em decimal é 4CA OTO 380
em hexa (note a sequência inversa à di- 390 IF INS-CHR$(13) THEN NO-VAL
visão para os dígitos hexa). Para apren- (NU$):IF NO>255 THEN 370 ELSE P
der melhor como funcionam todas es- RINT #439 STRINGS (5 CHRS 1 28)
, , ( )

sas conversões, digite o programa :RETURN


abaixo. 400 IF INSOCHRSU3) AND LEN [N
U$)>2 THEN 380
410 NUS-NUS+INS:PRINT #441,MIDS
(NUS+" ".1.3) ; :GOTO 3B0

CLS 0
PRINT #11."BIN.DEC.HEX";
PRINT £68 "BINÁRIO"
,

PRINT 8196, "DECIMAL"


PRINT 0323 "HEXADECIMAL"
.

PRINT #355 "4 + + , - " 30 PRINT INVERSE 1 ;AT 0.8;"


PHINT «371 "+ + + ,
- " ; BIN.DEC.HEX "
FOR J-l TO 15:P0KE 1040+32*J 40 PRINT INVERSE 1 AT 4,2;" ;

75: NEXT BINÁRIO


PRINT §450. "NUMERO HEX- 50 PRINT INVERSE 1 AT 9,2;" ;

DECIMAL:
110 PRINT 8227 "+ .
+ + + 60 PRINT AT 10.5:"+ +

70 PRINT INVERSE 1 AT 17.2; ;

THEN 1 HEXADECIMAL :

80 PRINT AT 18.4:"+ + + -
THEN NO-NO+1 :N0- 90 PRINT AT 18.20;"+ + +
AND 255 :GOTO 170
IF INS-"B" THEN NO-N0~l:NO- 100 LET no-0
AND 255 :GOTO 170 110 GOTO 150
I GOSUB 3 70 120 LET aS-INKEYS IF aS-" i

i
GOSUB 190: GOSUB 270 THEN GOTO 120
i
'GOTO 130 130 IF aS-" " THEN LET no-no
FOR X-7 TO 0 STEP-1 1 IF
! no-256 THEN LET no-0
IFINO AND 2"X)THEN N-l ELSE 135 IF a$-"b" then LET no-no
" " H

HIIIIIIIHHMi^MMMHHIIIIIIIIIII
1 i IF no— 1 THEN LET no-255 315 LET m-0: IF 11>-C T 8+X*3;M
140 IF aS-"b" OH aS-" " THEN LET m-c LET 11-11-c
: 340 NEXT X
GOTO 150 320 LET C-c/2 400 PHINT AT 21.1 "TOTAL HEX-
145 INPUT "?";no 330 PRINT AT 18,2+x*3;n ;CHRS Hl; CHRS LO
150 GOSUB 170: GOSUB 250 500 RETURN
160 GOTO 120 340 NEXT x
170 LET nu-no: LET c-128 400 PRINT AT 21,6; TOTAL HEX-
175 FOR X-0 TO 7 " ;CHRS hl ;CHRS lo ffU
180 LET n-0: IF nu>-c THEN 500 RETURN
LET n-1 LET nu-nu-c
:
5 KEY OFF
10 SCREEN0
190 LET C-C/2
15 COLOR 1.9
200 PRINT AT S.2+4*X;I)
20 CLS
210 IF n-1 THEN PRINT AT 10,2
20 CLS 30 LOCATE 10,0:PRINT" BIN, DEC.
+4"x;c* 2
30 PRINT AT 0,9:' BIN DEC HEX"
, , EX"
220 IF n-0 THEN PRINT AT 10,2
" 40 PRINT AT 4,4;' BINÁRIO: 40 LOCATE 2.4: PRINT" BINÁRIO:
+4"Jt;"0
50 PRINT AT 9.4;' DECIMAL
:

230 NEXT x DECIMAL:


60 PRINT AT 10,5 50 LOCATE 2,9:PRINT"
235 PRINT AT 13,6;"TOTAL DECIM
AL- ";n o;"
70 PRINT AT 17,4;"HEXADECIMAL: 60 LOCATE 3,10:PRINT"

80 PRINT AT 18,4;"+ + + -" 70 LOCATE 2,17:.PRINT" HEXADECI


90 PRINT AT 16,20:"+ + + -" MAL: "
260 LET lo- (no-hl*16) LET 11- :
+
lo>9 THEN LET lo-lo+7 100 LET NO-0 60 LOCATE 4,18: PRINT " + +
lo: IF
110 GOTO 150
265 IF hi>9 THEN LET hi-hi+7
270 LET hi-hi+48: LET lo-lo+48 120 LET AS-INKEYS 90 LOCATE 20,18:PRINT"+ + +
125 IF AS-"" THEN GOTO 120
280 PBINT AT 18,14;CHRS hl AT j

CHRS lo 130 IF A$<>"F" THEN GOTO 135 100 LET NO-0


18,30;
290 LET c-8 131 LET NO-NO+1 110 GOTO 150
300 FOR x-0 TO 3 132 IF NO-256 THEN LET NO-0 120 LET AS-INKEYS:IF AS-"" THEN
310 LET n-0: IF hh>-C THEN 135 IF AS<>"B" THEN GOTO 140 GOTO 120
LET hh-hh-c 136 LET NO-NO-1 130 IF AS" " " THEN LET NO-NO+1:
LET n-c :

137 IF NO —
1 THEN LET NO-255 IF NO-256 THEN LET NO-1
140 IF AS-"B" OR AS-"F" THEN GO 135 IF AS-"B" THEN LET NO-NO-1:
TO 150 IF NO —
1 THEN LET NO-255
145 INPUT NO 140 IF AS-"B" OR AS-" " THEN GO
150 GOSUB 170 TO 150
155 GOSUB 250 145 LOCATE 30,0; INPUT NO
160 GOTO 120 150 GOSUB 170:GOSUB 250
170 LET NU-NO 160 GOTO 120
171 LET C-128 170 LET NU-NO LET C-128
:

175 FOR X-0 TO 7 175 FOR X-0 TO 7


180 LET N-0 180 LET N-0:IF NU>-C THEN LET fi
Nos micros TRS-Color. TRS-80 -1 LET NU-NU-C
(com BASIC em disquete) e MSX, exis- 185 IF NU>-C THEN LET N-1 :

186 IF NU>-C THEN LET NU-NU-C 190 LET C-C/2


tem funções especificas para conver- 200 LOCATE 2+4*X 5 PRINT USING
terdecimais em hexas. Essas funções 190 LET C-C/2 . :

200 PRINT AT 5,2+4*X:N "#" ;N;


são {d corresponde a um número ou ex-
210 IF N-1 THEN PRINT AT 10,2+4 210 IF N-1 THEN LOCATE 4"X,10:P
pressão em decimal):
*X;C*2 RI NT USING "III" ;C*2

SOM
HEXS Idl
220 IF N-0 THEN PRINT AT 10.2+4 220 IF N-0 THEN LOCATE 4*X.10:P
RINT USING "III" ;0
230 NEXT X
235 LOCATE 6,13:PRINT "TOTAL DE
Se você quiser inclutr números em L- " ; NO ;
"
" CIMAL-" ;NO;
hexadecimal como parte de um progra- 240 RETURN 240 RETURN
ma (por exemplo, dentro de declara- 250 LET HI-INT (NO/16) 250 LET HI-INT (NO/16) LET HH-HI:

ções DATA), também não há problema 255 LET HH-HI 260 LET LO- (N0-HI*16) :LET LL-LO
para muitos computadores, Ao utilizar 260 LET LO- (NO-HI-16) :IF LO>9 THEN LET LO-LO+7
essas constantes em hexa para cálcu- 261 LET LL-LO 265 IF HI>9 THEN HI-HI+7
los subsequentes, o computador os 270 LET HI-HI+26 270 LET HI-HI+48:LET LO-LO+48
converterá internamente em decimal 275 LET LO-LO+28 280 LOCATE 14,18:PRINT CHR$(HI)
(ou. mais propriamente, em binário). 280 PRINT AT 18.14;CHR$ Hl AT 1 ;

8,30;CHRS LO 285 LOCATE 30,18:PRINT CHRS (LO)


290 LET C-8
300 FOR X-0 TO 3 290 LET C-8
Coloque &H antes do número. Exem- 310 LET N-0 300 FOR X-0 TO 3
plo: &HF3 311 IF HH>-C THEN LET N-C 310 LET N-0:IF HH>-C THEN LET N
312 IF HH>-C THEN LET HH-HH-C -C LET HH-HH-C
:

315 LET M-0 315 LET M-0:IF LL>-C THEN LET M


316 IF LL>-C THEN LET M-C -C LET LL-LL-C
:

317 IF LL>-C THEN LET LL-LL-C 320 LET C-C/2


Coloque S antes do número.
320 LET C-C/2 330 LOCATE 2+X*3,18:PRINT USING
Exemplo: $F6.
330 PRINT AT 18.2+X*3;N;AT 18,1 "C" ;N?
: ;

IIIIIIIIIIIHm^^^^^HMHIIIIIIIIIIII
335 LOCATE 18+X*3, 18: PRINT USIN
G"#" ;M;
340 NEXT LOCATE
400 LOCATE 6.21: PRINT" TOTAL HEX
- " ;CHHS (Hl) CHRS (LO) ;

500 RETURN

20 HOME
25 POKE 34.22
30 INVERSE HTAB 14: ; PRINT "B
IN. DEC. HEX"
40 VTAB 6; HTAB 5: PRINT "BINA
RIO"
50 VTAB 10: HTAB 5 PRINT "DEC
IMAL"
60 VTAB 16: HTAB 5: PRINT "HEX
ADECIMAL"
70 VTAB 22: HTAB 3; PRINT "NUM
EBO HEX-
80 VTAB 17:

90 VTAB 11: PRINT " + +

110 GOTO 170


120 VTAB 23: CALL - 958: HTAB
30: GET INS
130 IF INS - CHRS (32) THEN N
0 - NO + 1: IF NO - 256 THEN NO
- 0
140 IF INS - CHRS (66) THEN N
O - NO - 1: IF NO - - 1 THEN N 360 C - C / 2 DECIMAL:
370 VTAB 17: HTAB X * 4 + 2: P 0 + 0 + 32 + 0 + 0 + 4 + 2 + 0 = 38
O - 255
CHRS (32) AND
RINT N;: HTAB X • 4 + 22 PRINT :

150 IF INS < >


INS < > CHRS (66) THEN GOSU POTÊNCIAS DE 2:
380 NEXT
B 410
390 VTAB 22: HTAB 15: PRINT C 2'2 6 2 5 2 4 2 3 2 2 2 1 2°
170 GOSUB 190: GOSUB 270 CHRS (LO)
HRS (Hl) :
180 GOTO 120 400 RETURN O mesmo método de conversão é uti-
190 NU - NO:C - 128: FOR X - 7 lizado para o sistema hexadecimal; ape-
410 VTAB 23: HTAB 30: INPUT NO
TO 0 STEP - 1
nas, neste caso, formam-se quatro gru-
- C THEN N
420 IF NO > 255 OR NO < 0 THEN
200 N - 0: IF NU >
410 pos de quatro bits de cada vez.
1 NU - NU - C
Pressionando a tecla < B > você di-
:

205 C - C / 2 ,

210 VTAB 7: HTAB ABS (X - 7) minuirá 1 do número registrado na te-


«5+1: PRINT "
la. Ao mesmo tempo, se você pressio-
220 IF N - 1 THEN N - 2 " X:N$ nar qualquer outra tecla, além da barra
- STRS (N) : GOTO 230 de espaços ou da letra B, poderá orde-
225 NS - " 0" Uma vez digitado o programa, rode- nar rapidamente ao computador que
230 VTAB 11: HTAB ABS (X - 7) o com o comando RUN. Aparecerão na converta para binário e hexadecimal um
« 5 + 1 + (3 - LEN (NS) ) : PRI tela três linhas: uma contendo os dígi- número qualquer em decimal entre 0 e
NT NS tos do número em binário; mais abai- 255. Ao pressionar qualquer tecla, apa-
240 NEXT xo, a linha do número em decimal; e, recerá em um canto da tela um sinal de
250 VTAB 13: HTAB 5: PRINT "TO por último, os dois segmentos do núme-
- interrogação. Digite então o número de-
TAL DECIMAL- ";NO;" ";: CALL
ro em hexadecimal. sejado e acione <ENTER> ou < RE-
86B
260 RETURN Inicialmente, todos esses números es- TURN >. Ato contínuo, os números
tão zerados. Ao pressionar a tecla de es- equivalentesem binário e hexa serão
270 Hl - INT (NO / 16):HH - Hl
paçamento (a tecla F na versão para o mostrados no vídeo.
280 LO - (NO - Hl * 16) :LL - LO
: IF LO > 9 THEN LO - LO + 7 ZX-81), o número binário no topo da Note que o número máximo que po-
290 IF Hl > 9 THEN Hl - Hl + 7 tela será incrementado de 1 e seus equi- de ser representado por um byte de oito
300 Hl - Hl + 48: LO - LO + 48 valentes em decimal e hexadecimal apa- bits em binário é 11111111. Isso equi-
310 VTAB 17: HTAB 18: PRINT C recerão na parte de baixo da tela. O vale a 255 em decimal e a FF em hexa-
HRS (Hl) HTAB 38: PRINT CHRS
; : equivalente decimal é calculado decimal. Qualquer número armazenado
(LO) somando-se os valores (potências de 2) em um byte na memória do seu compu-
320 C - 8 correspondentes às posições onde um dí- tador pode ser representado por um va-
330 FOR X - 0 TO 3 gito binário é igual a 1. Exemplo: lor em hexa com dois dígitos.
340 N - 0: IF HH > - C THEN N
- C:HH - HH - C Com o tempo, você verificará que es-
350 M - 0: IF LL > - C THEN M BINÁRIO: sas conversões não são tão difíceis quan- I

- C:LL - LL - C ooiooi : to parecem a princípio.


CÓDIGO Dl MÁQUINA 1HIIIIIIIIIII
um
NÚMEROS MAIORES

Como um computador de oito bits


representa números maiores do que 255?
Simplesmente quebrando-os em duas
partes de oiço bits cada e colocando-os
cm duas memórias adjacentes. Assim,
o computador armazena qualquer nú-
mero até FFFF em hexa, ou 65 535 em
decimal.
0 sistema hexadecimal parece difícil e O FFFF é um valor importante em
complicado. Não seria possivel passar
computadores pessoais de oito bits, pois
n ele? Afinal, é realmente necessá-
rio aprendê-lo para operar em lingua-
é o número máximo de posições ende-
gem de máquina? reçáveis de memória RAM.
Sim. Se você tem a intenção de Números maiores ainda do que esses
aprender seriamente a programar em podem ser armazenados através do mes- Veja como o programa de conversão
código de máquina, um bom conheci- mo estratagema: dividi-los em três, qua- enlre bases aparece na leia dos microcom-
lento sobre como trabalhar com o sis- tro ou até mais porções de oito bits. putadores. \ disposição da leia c battanle
jma hexadecimal é imprescindível. A maneira como esses bytes são or- parecida a esta, nos micros de oulras li-
Existem programas prontos para ía- nhas. Agora fica mais fácil entender co-
ganizados depende do computador. A
3r a conversão automática de códigos mo o\ ires Sisternes numéricos funcio-
maior parte dos micros que usam o BA-
e operação em números binários (As- nam, (guandu você manda executar o
sembler) ou a conversão no sentido in- SIC armazenam os bytes de menor va- programa, as três linhas zeradas.
so (Disassemblerl. Além disso, eles lor (chamados LSB, ou leasl significam Pressione a letra B para diminuir o valor
!itam números expressos no siste- byte) nas memórias de endereço mais de na tela. e a linha de hinário ficará
I

ma decimai. No entanto, mesmo nes- baixo, e os bytes de maior valor (MSB, totalmente cheia de Is. l ogo abaixo, a li-
i
casos, o programador precisa re- ou most significam byte), nas memórias nha decimal irá completar-se com Ioda»
rer constantemente aos seus equi- de endereço mais alto. as potências de 2. Da direita para a es-
valentes hexadecimais. Muitas vezes, <joerdn você lerá os valores: I (que ê 2),
Outros computadores, como os com-
certas listagens emitidas por tais pro- 2 (que é 2), 4 (ou 2), etc. A linha hexade-
pativeis com o TRS-Color, fazem exa-
gramas (DUMP) contém apenas núme- cimal, mais abaixo, funciona da mesma
tamente o contrário.
s hexadecimais. E você não saberia forma, só que os dois digilos hexa são
trabalhar com eles se não conhecesse
Suponhamos agora que você queira computados independentemente.
sistema de base 16. encontrar o número decimal equivalen-
Em lições posteriores, aprendere- te a dois hexadecimais armazenados em
mos a fazer Assembly
manualmente; o compartimentos vizinhos de memória
conhecimento do sistema hexadecimal (um número maior do que FF, quebra- D = Hl H2
será um
pré requisito para entendê-las. do em dois).
Com o tempo e a prática, você verá Nos microcomputadores das linhas Nos micros compatíveis com o TRS-
que a dificuldade desse sistema é ape- Sinclair, TRS-80, MSX e Apple 11 bas- Color, a expressão usada é a mesma,
nas aparente. Na verdade, ele é tão
ta converter os dois hexadecimais (Hl mas a ordem de H 1 e H2 é inversa; ou
mpies e fácil quanto o sistema deci-
e H2) para decimal (D) e depois fazer seja, o byte de maior valor aparece an-
mal ou qualquer outro.
a seguinte operação: tes do menor byte.
Como devo fazer para reconverter de
hexa para decimal?
Cada digito de um número em hexa
vale 1 6 vezes o digito à sua direita. Pa-
;onverter um número em hexa, co-
O SISTEMA OCTAL
mo F6DA, por exemplo, deve-se tomar
cialmente o primeiro digito da direi- Existem apenas quatro sistemas de oclal está entrando em desuso, pois
e convertê-lo para notação decimal. numeração que podem ser utilizados não foi universalmente adotado pe-
No exemplo, A equivale a 1 0. O próxi- com vantagem na programação e los fabricantes de microcompu-
mo digito à esquerda vale 16 vezes operação de computadores digitais. tadores.
is; assim, convertemos D para de- Você já conhece três deles: o sistema O
octal tem 8 dígitos; 0, 1 2. 3, .

íal (o que dá 1 31, e realizamos a ope-

ração: 13 x 16 = 208. 0 próximo dí-


binário, que é o natural para um 4,5,6, 7 e 8. O
sistema de con versão
computador digital; o sistema deci- de um numero em octal para decimal
gito ã esquerda vale 1 6 vezes mais; as-
sim, multiplicamos 6 x 16 » 16 = mal, espontaneamente utilizado pe- é semelhante ao usado com o hexa-
1 536. O último dígito do exemplo pre- lo ser humano; e o sistema hexadeci- decimal, só que o multiplicador é 8.
cisa também ser multiplicado por 16. mal, cuja base (16) é uma potência de Por exemplo:
F vaie 1 5, assim temos 1 5 x 1 6 x 16 2. Essa correspondência facilita enor-
<16 = 61 440. Somando todos os va- memente sua utilização pelo pro-
lores obtidos temos 10 + 208 + 1536 gramador.
423 . : 64 + 2 : ( + 3 i 275
.
61440 = 63194, em decimal. O quarto sistema de numeração
Ou então use o programa listado que pode ser usado com computado- Alguns computadores pessoais
aqui para converter o número hexa de
res digitais é o sistema oclal, ou se- permitem representar constantes em
dois em dois dígitos de cada vez, e de-
s multiplique o par mais à esquerda ja, de base 8, que ê também uma po- oclal (&0), ou têm funções de conver-
por 256. tência do número 2. Apesar disso, o são (OCTS).
4 PROGRAMAÇÃO DC JOGOS 1

MARQUE ©TEMPO 0 JOGO DO CAMPO MINADO


APRENDA A MONTAR UM
PLACAR

E OS PON
COMO INCORPORAR AO JOGO

Todo jogo de ação realiza algum tipo

de contagem de pontos ou de
tempo, de modo a tornar a competição
mais emocionante. Nesta lição
você aprenderá como fazer isso com a

ajuda de programas bem simples.

Quase todos os jogos de computado-


res precisam de alguma forma de mar-
cação de pontos ou de cronometragem
— ou ambos. Sem eles você não poderá
saber se está se saindo bem no jogo, se
está melhorando, ou quem é o melhor
jogador. Além disso, são esses elemen-
tos de medida de desempenho que dão
graça aos jogos de computador.
Seria possível, evidentemente, obri-
gar alguém a sentar-se ao seu lado e fi-
car contando os disparos que você faz.
A melhor solução, no entanto, é progra-
mar o computador para fazer isso por
você. Umas poucas linhas a mais no
programa darão cabo dessa tarefa, não
imporia a complexidade do esquema de
marcação de pontos.
Da mesma forma, não existe neces-
sidade de recorrer a um cronometro pa-
ra marcar o tempo. Como se viu nos
programas para o jogo de labirinto (pág.
46 a 52), quase todos os tipos de com-
putador têm um relógio embutido, que
pode ser utilizado para melhorar seus jo-
gos (a exceção é o Apple II, que precisa
de uma placa especial).

Para que você possa ver como mon-


tar esquemas práticos de contagem e
cronometragem, apresentamos a seguir
um jogo adequado a todas as máquinas,
com exceção das compatíveis com o
ZX8I, e ao qual acrescentaremos pro-
gressivamente todas as rotinas necessá-
rias. Os esquemas são simples e podem
ser colocados também em outros jogos.
O jogo é chamado Campo Minado,
e nele você é um comandante de tanque
cuja missão é resgatar os pára-quedistas
que estão pousando imprudentemente
em um campo minado. Por onde quer
ii
; :, "

4 PROGRAMAÇÃO Dl JOGOS 4

que passe, o tanque corre o risco de de- de como isso é feito). A linha 220 testa
tonar uma mina escondida ao acaso pe- IF PO > 255...
para manter o tanque no
lo computador. Assim como em campo alio da parte central da tela. Ora, a últi-
de batalha real, as minas são invisíveis; ma locação de tela no alto da parte cen-
portanto, mova-se com cuidado! tral do vídeo é a 255; assim o IF... impe-
O tanque (apenas um caractere #, de que o tanque avance abaixo da linha
infelizmente, pois você ainda não apren- pontilhada, desenhada pela linha 70.
deu tudo sobre combinar gráficos e mo- Esta última (raça a linha através da
vimentos em um programa BASIC) exe- tela, utilizando uma nova função —
cuta movimentos por meio das seguin- STRING$.OSTRING$(32,"-"),como
tes teclas: Z para a esquerda, X para a aparece na linha 70, diz ao TRS-Color
P para cima e L para baixo. O
direita, para desenhar um cordão {stríng, em in-
âmago do programa está na rotina de glês) de 32 travessões (se você quisesse
movimentação de um caractere na tela dez pontos de interrogação deveria uti-
estudada numa lição anterior. lizar STRINGSUO,"?"), e assim por
Quando você digitar e rodar esta seção diante). O lugar em que o pára-quedis-
do jogo verá que ele ainda não está com- ta cai é escolhido por um número alea-
pleto, pois nada acontece depois que o tório na linha 90, e a linha 10 exibe o 1

pára-quedista é resgatado. Apenas o tan- pára-quedas na tela se a posição esco-


que continua a vagar, sem rumo, através lhida já não esiiver ocupada pelo tan-
da tela. O programa deve ser interrompi- que. Se estiver, a linha 90 escolherá ou-
do pressionan d o-se as teclas <BRKAK> tra posição.
< ESCAPE > ou < STOP > ou você te- , Finalmente, a posição da mina escon-
rá que esperar até que o tanque detone dida é escolhida pela linha 250. linha A
uma mina escondida ao acaso. Nesse mo- 270 checa então sê o tanque e a mina es-
mento, o jogo terminará. Mas não se tão na mesma locação de tela. Se esti-
preocupe, essa situação melhorará tão lo- verem, a mensagem de explosão será exi-
go você acrescenteas rotinas de contagem bida, e o programa parará.

I
e cronometragem que se seguem.

50 LET PO=210
60 CLS
50 LET tx-16: LET ty-5
60 CLS
70 PRINT AT 11.0; "
70 PRINT e256,STRINGS(32. n -")
90 LET X=HND (2561-1 90 LET px-INT (RND"30)+1
110 IF XOPO THEN PRINT SX,"0"; 100 LET py-INT (RNDM0)
ELSE GOTO 90 110 IF px-tx AND py-ty THEN
120 PRINT @PO, "t" GOTO 90
130 LET LP-PO 120 PHINT AT py px "O" ;AT ty,.
;

"*"
tx:
140 IF PEEK (340) =247 THEN LET P
0=PO-l;GOTO 190 130 LET txx-tx: LET tyy-ty
150 IF PEEK{338)-247 THEN LET P 140 LET aS-INKEYS
O-PO+l:GOT0 210 145 IF aS-"w" THEN LET ty-ty-
160 IF PEEKI338) '251 THEN LET P 1

O-P0-32:GOT0 220 150 IF a$-"z" THEN LET ty-ty+


170 IF PEEK(342)=253 THEN LET P
O=P0+32:GOTO 220 160 IF a5="a" THEN LET tx-tx-
180 GOTO 140
190 IF (LP AND 3U-0 THEN LET P 170 IF aS-"s" THEN LET tx-tX+
O- LP 1
200 GOTO 220 190 IF ty<0 OR ty>10 THEN LET
210 IF (PO AND 311-0 THEN LET P ty-tyy
O-LP 200 IF tx<0 OR tx>30 THEN LET
220 IF PO>255 OR PO<0 THEN LET tx-txx
PO=LP:GOTO 140 230 PRINT AT tyy, txx; " "
230 PRINT 6LP. " " 240 PRINT AT ty tx; " t ,

240 PRINT #PO, "#" 250 LET mx-INT (RND*30)+1


250 LET M-RND (256) -1 260 LET my-INT IRND*10)
270 IF M=PO THEN PRINT 6PO." " 270 IF mx-tx AND my-ty THEN
PRINT §130, "BOOM! M UOCE ACERTO PRINT AT my.mx;" PRINT AT
- Voce acertou um
trolam os movimentos do tanque. Uma
8 0 "BOOM
;

U UMA MINA! " STOP :


. ! ! !

explicação completa desse processo es-


310 GOTO 130 a Binai": GOTO 330
310 GOTO 130 tá na página 31.
As linhas 190 e 200 impedem que o
O movimento do tanque pela tela é No programa do Spectrum, a tela é tanque saia da área situada acima da li-
controlado pelas linhas 140 a 170, que dividida ao meio pela linha 70, que im- nha (pontilhada) traçada pela linha 70,
verificam quais foram as tecias pressio- prime uma série de 32 travessões ao lon- e impede que ele desapareça da tela. A
'* nadas (veja a pág. 33, se não se lembra go do vídeo. As linhas 145 a 170 con- posição de queda dos pára-quedistas é
) ) :

4 PROGRAMAÇÃO Dl JOGOS 4

com a do tanque. Se eles estiverem no cupeem entender, por enquanto, o co-


mesmo lugar, o tanque será exibido na mando VPOKE BASE, na linha 110.
tela e aparecerá uma mensagem de ex- Ele serve para colocar um caractere co-
plosão. Neste caso, o programa parará. mum (ou gráfico) em uma certa posição
da tela, e é usado aqui por ser mais rá-
pido que o LOCATE.
A linha 250. escolhe a posição da mina
50 LET PO-220 escondida. A linha 270 verifica se o tan-
60 CLS
70 LOCATE 0,12: PRINT STRINGS 39 <
que e a mina estão na mesma locação da
tela. Sendo positivo, a mensagem de ex-

90 LET X-INT (RND { 1 ) "480 plosão é exibida, e o programa termina..


110 IF XOPO THEN VPOKE BASEIO)
+X,ASC("0") ELSE GOTO 90
120 VPOKE BASE (0) + PO ASC ("#"
, )

130 LET LP-PO 50 LET TX - 20: LET TY - 10


135 LET K$-INKEYS:IF KS-" THEN 60 HOME
GOTO 135 70 FOR I - 1 TO 40
140 IF KS-CHRS(29) THEN LET PO- 74 HTAB li VTAB 13: PRINT
PO-l:G0T0 190 78 NEXT I
150 IF KS-CHR$(28) THEN LET PO- 90 LET PX - INT RND (1) • 4 (

PO+1:GOTO 210 0) + 1
160 IF K$-CHR$|30) THEN LET PO- 100 LET PY - INT RND (lí * (

PO-40 :GOTO 220 12) + 1


170 IF KS-CHHS(31) THEN LET PO- 110 IF PX < > TX AND PY < >
PO+40;GOTO 220 TY THEN HTAB PX VTAB PY PHIN : :

180 GOTO 140 T "O";: GOTO 120


190 I? (LP/40-INTUP/40) -0 THE )
111 GOTO 90
N LET PO-LP 120 HTAB TX: VTAB TY PRINT "| :

200 GOTO 220


210 IF (PO/40-INT (PO/40) -0 THE ) 130 LET LX - TX: LET LY - TY
N LET PO-LP 140 LET K - PEEK ( - 163841
220 IF P0>479 OH PO<0 THEN PO-L POKE - 16368,0
P:GOTO 130 150 IF K - 208 THEN LET TY -
230 VPOKE BASE(0)+LP,ASCÍ" ") TY - 1
160 IF K - 204 THEN LET TY -
240 VPOKE BASE (0) +PO. ASC ("*"
250 LET M-INT (RND II) "480) TY + 1

270 IF M-PO THEN VPOKE BASE 0) + í


170 IF K - 218 THEN LET TX -
P0,ASC(" "):L0CATE 5,4:PBINT "B TX - 1
175 IF K - 216 THEN LET TX -
OOM!!-VocS acertou numa mina":E
ND TX + 1
310 GOTO 130 190 IF TX C 1 OR TX > 40 THEN
LET TX - LX
O movimento do tanque pela tela é, 200 IF TY < 1 OR TY > 12 THEN
como no caso anterior, controlado pe- LET TY - LY
"
las linhas 140 a 170, que verificam quais 2 30 HTAB LX : VTAB LY : PRINT
foram as teclas pressionadas. A linha
240 HTAB TX: VTAB TY : PRINT "#
220 tesla rF PO>479... a fim de restrin-
gir o campo de ação do tanque à parte 250 LET «X - INT ( RND (1)
alta do meio do video. Agora, porém, 40) 1
a última locação de tela nessa posição 260 LET MY INT f RND (1)
é a 479; assim, O
IF... impede que ela 12) + 1
avance abaixo da linha pontilhada de- 270 IF MX - TX AND MY - TY THE
senhada pela linha 70. N HTAB MX: VTAB MY PRINT " ": :

Também como no caso anterior a : HTAB 7: VTAB 7: PRINT "BOOM!!


função STRINGS é empregada pela li- -Voce acertou uma mina";: GOTO
330
nha 70 para traçar a linha ao longo da 310 GOTO 130
tela. OSTRINGS09, '*—'*), como apa-
rece na linha 70, diz simplesmente ao O movimento dotanque pela tela é
MSX para desenhar um cordão de 39 controlado pelas linhas 140 a 170, que
travessões (veja na pág. anterior, abai- checam as teclas pressionadas (lembre-
xo do programa para o TRS80 e o TRS se da explicação da pág. 33). Os coman-
escolhida aleatoriamente pelas linhas 90 Color, como fazer para obter dez pon- dos PEEK e POKE da linha 40 são ne- 1

e 100. A linha 1 10 verifica se o tanque tos de interrogação). cessários porque o Apple não tem uma
e um dos pára-quedistas ocupam a mes- O lugar em que o pára-quedista cai função em BASIC, como o 1NKEVS,
ma locação de tela. Se isso ocorrer, uma é escolhido por um número na linha 90; que serve para fazer a varredura do te-
nova posição de queda será escolhida, a linha 10 mostra o pára-quedas na te-
1 clado. A fim de restringir as manobras
indo-se para a linha 90. As linhas 250 la se a posição escolhida já não estiver do tanque, as linhas 1 90 e 200 testam se
e 260 escolhem um lugar para a mina. ocupada pelo tanque. Se estiver, a linha as suas coordenadas (TX e TY) não ex
A linha 270 compara a posição da mina 90 escolherá outra posição. Não se preo- cedem 40 c 12 posições, respectivamen-
'
: "

III1IIIIIIIUH * PROGIIAMAÇÃODCJOGOS 4 IIHIIIIIII


le (margem direita da
linha acima da linha pontilhada).
As linhas 70 a 78 desenham uma
teia e posição de

li-
D 270 IF M = PO THEN PRINT gPO,"
"

nha pontilhada ao longo da tela. PRINT §


Um número aleatório nas linhas 90 130 "BOOM!
,

VOCE ACERTOU UMA


! ! 1

e 100 escolhe o lugar em que o pára INA! " :G OTO 330


quedista cai; a linha 110 exibe o pára
quedas na tela se a posição escolhida ji
não estiver ocupada pelo tanque. Se es<
tiver, então a linha 90 escolherá uma ou- 270 IF mx-tx AND my-ty THEN
tra posição. Neste caso, a posição da PRINT AT ray.irix; " " PRINT AT 8
! :

,3;*BOOM!!! - VOCE ACERTOU UMA


na escondida é escolhida pelas linhas 250
MINA! " GOTO 310
e 260. Alinha 270 então verifica se o
:

tanque e a mina estão na mesma loca-


ção da tela. Se eles estiverem, será exi-
bida uma mensagem de explosão, e o
270 IF M-PO THEN VPOKE BASE(0)+
programa se deterá. PO. ASCI" " LOCATE S,4:PRINT "B
) :

OOM!!-Voc6 acertou numa mina":G


OTO 330

Em jogos do tipo videogame, a con-


tagem normalmente é aumentada quan-
do as posições de tela de dois objetos são 270 IF MX - TX AND MY - TY THE
iguais. Os objetos podem ser um míssil N HTAB MX: VTAB MY PRINT " "j :

e, o seu alvo, o "come-come" e um : HTAB 7: VTAB 7: PRINT "BOOM!!


-VOCE ACERTOU NUMA MINA" GOTO
monstrinho, um tanque e um pára-
r :

330
quedista, um cavalo e o poste de chega-
da, ou qualquer outra coisa.
Assim, acrescente esias linhas ao seu
A linha 280 è a mais importante. Ela
checa se o tanque e o pára-quedista es-
programa, para ver como um mecanis-
tão na mesma locação da tela. Se esti-
mo de contagem funciona na prática. verem, então o placar será incrementa-
do de 1 ponto.
A linha 40 volta o placar para zero,
antes de o jogo começar, e a linha 330
exibe a contagem. Ao modificar-se o fi- 30 LET ha=0
nal da linha 270, o computador exibe a 350 IF 9>h3 THEN LET hs-3
370 PRINT AT 18.8; "RECORDE-
PARAOUEDISTAS contagem depois que a mina tiver sido
330 PRINT €295 S; , "
detonada.
O jogo funciona assim: o jogador re-
cebe continuamente pára-quedistas pa-
ra resgatar. Quando um é resgatado, ou- 30 LET HS-0
40 LET s-0 tro pára-quedista cai do céu. 350 IF S>HS THEN LET HS-S
280 IF px-tX AND py-ty THEN O jogo termina quando o tanque em 370 LOCATE 12,20:PRINT "He<
LET a-a-t-1 GOTO 90
: movimento passa sobre a mina, provo-
330 PRINT AT 14.8;a;" PARAQUED cando uma explosão.
ISTAS"
DE
30 LET HS-0
fffà
350 IF S > HS THEN LET HS-S
Acrescentar um dispositivo de regis-
370 HTAB 12: VTAB 20: PRINT "R
tro do recorde de pontos no jogo não ecorde-" HS
; ;

édifícil. Tudo o que você precisa é de

3 30 LOCATE 8.16: PRINT S:' uma variável para armazenar o recorde,


algum modo de atualszá-la assim que Primeiro o programa deve introdu-
e
zir a variável contendo o recorde com
este forquebrado. Fora isso, é necessá-
ria ainda uma rotina de exibição do re-
um valor o mais baixo possível. Assim,
a linha 30 iguala HS a zero. Quando o
corde. Estas são as linhas que você de-
jogo termina, a linha 350 compara o úl-
40 LET S-0 ve acrescentar para aumentar a capaci-
timo escore (S) com o recorde (HS). Se
280 IF PX - TX AND PY TY THE dade de registrar e exibir recordes no jo-
"Campo Minado": o escore for maior do que o recorde, en-
N LET S - S + 1: GOTO 90 go
tão HS será atualizada, recebendo o va-
330
"
HTAB 12: VTAB 15: PRINT S:
PARAQUEDISTAS"

Você precisará substituir o STOP ou


D
30 LET HS-0
lor em S. Finalmente, a linha 370 exibe
o recorde na tela.
Pode-se pensar que essas linhas serão
i END na linha 270 por GOTO 330. A li- 350 IF S>HS THEN LET HS = S suficientes para incorporar sempre no-
i
nha 270 deverá ficar assim, agora: 370 PRINT ê424. "RECORDE-";! vos recordes ao jogo. Infelizmente isso
;

Illllllll
"MAIS UMA VEZ? (S/N)" seja im-
pressa pela linha 410.
A rotina que pergunta ao jogador se
quer jogar de novo e colhe a sua respos-
ta está nas linhas 410 a 450 (a linha 430
reiniciará o programa na linha 40 se S
for pressionado, e a linha 440 parará o
programa se N for pressionado). A ii-
nha 450 assegura que qualquer outra te-
cia será ignorada. Como agora não exis-
te necessidade de digitar RUN
cada vez
que você desejar jogar de novo, o valor
de HS é preservado.

COMO FAZER A CRONOMETRAGEM

Do jeito que está, o jogo depende


muito da sorte —
o jogador simples-
mente continua andando com o tanque,
até encontrar uma mina escondida.
Podemos, entretanto, introduzir no-
vos elementos no jogo, transformando-
o, se quisermos, em uma corrida con-
tra o relógio. Um
desses elementos po-
deria ser, por exemplo, um dispositivo
interno para marcar o tempo gasto em
resgatar dez pára-quedistas.

D
não Sempre que o programa
é verdade. 300 IF S=10 THEN GOTO 320
é rodado, o computador zera automa- 320 LET T=TIMER
ticamente o valor de HS registrado no
330 PRINT 6295 S " PARAQUEDISTAS
.
;

jogo anterior, assim como os valores de


todas as outras variáveis. Para manter
o valor de HS entre uma partida e ou- 410 PRINT TAB(10)
;
"Outra vez? (
"
tra do jogo, você precisa acrescentar li- S/N)
nhas de programa para perguntar ao jo-
420 LET KS-INKEYS;IF KS""" THEN
GOTO 420
gador se ele quer jogar outra vez, como
430 IF KS-"S" OR KS-"3" THEN GO 10 LET t-0
as que foram usadas em jogos ante- 80 POKE 23672.0: POKE 23673.0
TO 40
440 IF KS-"N" OR KS-"n" THEN EN 290 IF a<10 AND p*=tx AND py=t
D y THEN GOTO 90
a
390 FOH F-l TO 1000:NEXT F
450 r-oTO 420 300 IF 9-10 THEN GOTO 320
320 LET t-PEEK 23672+256*PEEK
23673
400 PRINT 8130 340 IF s-10 THEN PRINT AT 16.
B "EM "it/50;" SEGUNDOS"
;

410 PRINT 6135, "OUTRA VEZÍS/N)? 390 FOR F - 1 TO 1000: NEXT F


400 FOR I - 1 TO 40: HTAB I: V
420 LET KS-INKEY:IF KS""" THEN TAB 7 PRINT " "
: NEXT I
; :

GOTO 420 410 HTAB 11: VTAB 8: PRINT "Ou


430 IF KS-"S" THEN GOTO 40 tra veí? (S/N) "
440 IF KS-"N" THEN END 420 GET AS
450 GOTO 420 430 IF AS - "S" THEN GOTO 40
440 IF AS - "N" THEN END 300 IF S-10 THEN GOTO 320
450 GOTO 420 320 LET T=TIME
340 IF S-10 THEN LOCATE 10,18:P
Isto é o que a linha extra faz: RINT "em "iT/50;" segundos"
390 PAUSE 100 Cria-se um pequeno retardo de tem-
400 PRINT AT 8.3; TAB 31 po, introduzido pelo laço FOR.. .NEXT O
relógio existente em cada um dos
410 PRINT AT 8,7;"Quer jogar tipos de micros acima corre durante to-
na linha 390, nos programas para todos
e novo (S/N)?"
420 LET aS-INKEYS s computadores, exceto para o Spec- do o tempo em que o computador esti-

430 IF aS-"a" THEN GOTO 40 trum, que usa o comando PAUSE. li-A ver ligado.
440 IF aS-"n" THEN STOP nha 400 limpa uma parte da tela, de mo- Para iniciar a cronometragem do jo-
450 GOTO 420 do a prepará-la para que a mensagem go, você precisa apenas zerar uma va-|
; ;

A PROGRAMAÇÃO DC JOGOS 4

lorcronometrado, e uma variável T, que


é incrementada de 1 a cada ciclo de var-
redura do teclado. Esie é um truque
muito fácil de ser implementado, e que
serve para qualquer computador que
não tenha relógio interno.
A variável relógio é zerada na linha
80 e recebe o valor do tempo gasto na
linha 320. Para calcular o valor do tem-
po em segundos, divide-se o conteúdo
de T por 6.

RECORDE DE TEMPO

Da mesma forma que adicionamos o


registro de recordes de pontos ao pro-
grama anterior, poderíamos agora
acrescentar um registro do recorde de
tempo (no caso, o menor tempo gasto
para salvar dez pára-quedistas). O prin-
cípio geral de registro de recordes de
tempo pode ser aplicado em muitos ou-
tros jogos.
Estas são as linhas a serem acrescen-
tadas ao programa:

D
20 LET LT-999999
360 IF T<LT AND S-10 THEN LET L
riáve!de [empo. A linha que coloca em plicar o valor da locação 23673 por 256 T-T
zero o cronometro é a linha 80 você— e acrescentar o valor armazenado na lo- 380 PRINT #452 "MENOR TEMP0=";L
,

notará que para zerar o cronometro do cação 23672. Esta é a razão da expres- T/50;" SEGUNDOS"
TRS-Color e do MSX
basta fazer Tl- são numérica na linha 90, na versão pa-
MER = O. No Spectrum é mais com- ra o Spectrum.
plicado: a linha do programa zera duas O relógio deve ser parado quando o
locações específicas na memória de tra- jogador tiver resgatado dez pára- 20 LET lt-999999
balho do micro, através de POKE
23 quedistas; assim, a linha 300 checa se es- 360 IF t<lt AND 3-10 THEN LET
672,0 e POKE 23 673.0. te valor foi atingido c salta para a linha lt-t
O relógio é "parado" pela linha 320. 320, que "pára" o cronometro. 380 PRINT AT 21.4;"MEN0R TEMPO
Na verdade, ek não se detém; assim, vo- Se o total de resgatados for menor -"ilt/50i" SEGUNDOS"
cê simplesmente instrui a máquina a que dez, a linha 290 manda outro pá-
"lembrar-se" do valor de tempo mar- ra-quedista para ser salvo peio jogador.
— Hfi
cado em um determinado momento A linha 340 só exibirá o tempo total
quando dois objetos coincidem na tela, de jogo se os dez pára-quedistas tiverem 20 LET LT-99'P999!
por exemplo. sido recuperados. A leitura do cronome- 360 IF T<LT AND S-10 THEN LET L

tro é dividida por 50 no programa. As-


T-T
Nesses programas, a variável que
380 LOCATE 6,22:PRINT "Melhor t
contém a leitura do relógio é chamada sim, o tempo exibido será expresso,
empo: "itT/50j" segundos"
de T —
no MSX e no TRS-Color, isso aproximadamente, em segundos.
com LET T = TIMER,
é feito
e
a linha
no Spectrum, com LET T =
23672 + 256*PEEK 23673.
PEEK QE £
80 LET T - 0 20 LET LT - 99999
O comando PEEK, como aprendere- 290 IF S < 0 AND PX TX AND P 360 IF S - 10 AND T < LT THEN
mos em uma lição posterior, "olha" os ¥ - TY THEN GOTO 90 LT-T
valores numéricos contidos nas mesmas IF S - 10 THEN GOTO 330
300 380 HTAB 12: UTAB 21: PRINT "e
locações de memória zeradas no início IF S - 10 THEN HTAB 12: V
340 m " ; LT / 6;" segundos"
do programa. TAB 16: PRINT "em ";T / 6;" seg
A como qualquer lo-
locação 23672, undoa"
Inicialmente, devemos inicializar a
cação de memória em um micro de 8
pode conter números inteiros en- A contagem de tempo na versão do variável usada para armazenar o menor
bits,
tre 0 e 255. A locação 23673 é incremen- programa para os microcomputadores tempo (LT). Esse valor, ao contrário do
tada de 1 toda vez que esse número for
,
da linha Apple é feita de forma inteira- usado para introduzir a variável de re-
excedido na locação 23672. mente diferente das outras máquinas, corde de pontos, deve ser bem alio, no
Assim, para calcular o valor total do pois eles não têm relógio interno. começo. A linha 20, incorporada ao pro-
tempo em que o cronometro do Spec- Neste caso, definimos uma variável grama, iguala a variável LT a 999999.
trum esteve correndo, você deve multi- denominada TIME, que conterá o va- A linha 360 compara o último tem-
" " " " "

4 PROGRAMAÇÃO Di JOGOS 4

po de jogo registrado com o menor


tem- 100 PRINT AT 11,14; "BANG !
!

po, armazenado em LT. Se aquele for 110 PAUSE 50


menor ainda do que o último recorde de 130 LET m-INT (RND«35)+1
140 IF t<m THEN PRINT AT 11,9
tempo, passará a ser o novo recorde,
;"V0CE SOBREVIVEU"
transferindo-se o seu valor para LT. 150 IF t>m THEN PRINT AT 11,9
Finalmente, a linha 380 exibe o recor- ;"VOCE ESTA MORTO"
de de tempo, em segundos. O valor da 160 IF t-m THEN PRINT AT 11,9
variável LT é dividido por 50 ou por 100, "VOCÊS ESTÃO AMBOS MORTOS"
1

para que isto se torne possível.

TEMPO DE REAÇÃ0
m
20 CLS
Existe algum limite máximo para
ríodo de medida de tempo?
pe-

30 LET N-RND(1)*900 Sim. existe — embora normalmen-


Até agora, você viu como medir o 40 FOR F-l TO N te seja ião longo que, na prática, não
tempo com auxilio do relógio interno do 50 NEXT F faz diferença. O relógio interno da
computador, dentro de um programa 60 LOCATE 17,11:PRINT "SAQUE!" maioria dos computadores domésticos
que checa, por exemplo, as posições de 70 TIME-0 corre a velocidades semelhantes. O fa-
80 IF INKEYS-"" THEN 80 tor limitante, portanto, é o número má-
dois objetos na tela.
90 LET T-TIME/6 ximo de impulsos de relógio que o com-
Outra aplicação interessante para esse
100 LOCATE 17,11:PRINT " BANG !
putador pode armazenar. As linhas
modo de aferição de tempo é utilizar o !

TRS-Color e MSX utilizam dois bytes;


teclado para medir a velocidade de rea-
110 FOR F-l TO 300
120 NEXT F por isso podem contar até 65 535 im-
ção do jogador a algum tipo de ação pulsos de relógio, um a cada 1/50 de
130 LET M-RNDU)*25
contrária. 140 IF TCM THEN LOCATE 13,11:PR segundo. Isso dá uma capacidade má-
Você já sabe como função
utilizar a INT "Você sobreviveu" xima de temporização de cerca de 22
INKEYS (em caso de dúvida, veja na 150 IF T>M THEN LOCATE 13,11:PB minutos. Já os micros da linha Spec-
pág. 28). Ela pode servir não só para INT "Você está morto" trum usam 3 bytes, o que lhes dá cer-
controlar a movimentação de objetos na 160 IF T-M THEN LOCATE 13,U:PR ca de quatro dias de medida contínua
INT "Ambos morreram" de tempo!
tela, mas também para iniciar e parar
contagens de tempo.
Como funciona o cronometro
Eis aqui um jogo da variedade "rá-
pído-no-gatilho" que ilustra muito bem
,
EU deum microcomputador?
interno

esse tipo de aplicação. O programa mos-


20 HOME Todo microcomputador tem um dis-
30 LET N - RND (1) - 2000 positivo interno para sincronização das
tra na tela: "SAQUE!", e o jogador
40 FOR F - 1 TO N 3tividades da Unidade Central de Pro-
deve reagir o mais rapidamente que 50 NEXT F cessamento, que é chamado de relógio
puder, pressionando qualquer tecla no 60 HTAB 17: VTAB 13: PRINT "SA ou clock. Esse relógio interno tem por
I
teclado. QUE ! função gerat pulsos elótricos repetidos
70 LET T - 0 a uma frequência constante para cada
80 X - PEEK - 16384): POKE < micro: essa frequência é chamada de
- 16368.0 velocidade de relógio, e seu valor va-
20 CLS 81 IF X ) 127 THEN GOTO 100 ria conforme a marca do computador.

30 LET N=RND(900) 85 LET T - T + 1 Por exemplo, o Apple íl tem relógio


40 FOR F-0 TO N 90 GOTO 80 de MHz (megahertz, ou seja. um mi-
I

50 NEXT F 100 HTAB 17: VTAB 13: PRINT "B lhão de "batidas" de relógio por segun-
60 PRINT 6269, 'SAQUE! !
" ANG! " ! do); o TRS-BO tem 2.7 MHz, e assim
70 TIMER-0 110 FOR F - 1 TO 1000 por diante. Mas esse temporizador in-
"
80 IF INKEYS" "THEN GOTO 80 120 NEXT F terno não pode ser aproveitado para
90 LET T=TIMER 130 LET M - RND (1) * 20 medir o tempo como um verdadeiro
100 PRINT €269. "BANG! !! 140 IF T < M THEN HTAB 12: VT cronâmetro.
110 FOR F-l TO 300 AB 13: PRINT "VOCE SOBREVIVEU"
120 NEXT F 150 IF T > M THEN HTAB 12: VT
130 LET M-RND{25) AB 13: PRINT "VOCE ESTA MORTO" cronômetro, armazenando o seu valor
140 IF T<M THEN PRINT 6264, "VOC 160 IF T - M THEN HTAB 12: VT
naquele momento na variável T. A linha
E SOBREVIVEU" AB 13: PRINT "AMBOS MORRERAM "
150 IF T>« THEN PRINT §266, "VOC
100 exibe "BANG!!".
E ESTA MORTO" O programa é muito simples. Após Existe uma pausa introduzida pelas
160 IF T-M THEN PRINT 6264 "VOC ,
a linha 20 ter limpado a tela, uma pau- linhas 1 10 e 120 (a linha 1 10 somente no
ES ESTÃO AMBOS MORTOS" sa aleatória é introduzida pelas linhas 30 Spectrum) antes que um novo retardo
a 50. A linha 60 exibe "SAQUE!", eo inicial de tempo seja sorteado pelo pro-
cronômetro é acionado imediatamente grama. Isto é feito pela linha 130 do
pela linha 70. A
linha 80 faz com que programa.
a máquina espere até que uma tecla se- Em seguida, o computador sorteia
20 CLS ja pressionada. A linha é exatamente uma variável aleatória M, que conterá
30 LET N-INT (RND*400)+1 igual à que foi utilizada nos programas o tempo levado pelo computador para
40 PAUSE n
de jogos com controle pelo teclado (ve- "sacar" sua arma. As linhas 140 a 160
60 PRINT AT 11 ,14:"SAQUE! i

70 POKE 23672,0: POKE 23673,0 ja pág. 28). comparam os valores T {do jogador) e
80 IF INKEYS- " " THEN GOTO 80 Assim que qualquer tecla tenha sido M (da máquina) e declaram quem foi o
90 LET T*PEEK 236?2+256*PEEK pressionada, o programa continua pa- vencedor do duelo (ou se ambos os due-
ra a linha 90, que pára efetivamente o listas morreram!).
2 APUCAÇÕCS 2

Seu caderninho de endereços está uma

ORGANIZE AS bagunça? Sua coleção de discos


tem mais problemas do que discos? Eis

um programa que o A
SUASCOLECÕES aqui
a colocar
ajudará

ordem nesse caos. ^^^0^

As pessoas que nunca utilizaram um da registro pode ter. "ABRIR UM AR-


computador pessoal sempre perguntam QUIVO" é aopção 1 do menu princi-
que tipo de aplicações domésticas ele po- pal; assim, para selecioná-la, você deve
deria ter. As respostas dadas, porém, ra- pressionar a tecla I: as palavras "VO-
ramente são convincentes. CÊ TEM CERTEZA?" aparecerão na
Neste artigo apresentamos um pro- tela.Essa reação da máquina é uma pre-
grama que pode ser útil para muitas pes- caução contra o pressionamento aciden-
soas. Ele é um programa de banco de tal da tecla I, pois chamar a rotina dm,

dados, ou seja, de organização e recu- "ABRIR UM


ARQUIVO" quando o
peração de qualquer tipo de informação sistema de arquivamento já estiver ar-*
que possa ser fichada. E um sistema de mazenando dados pode comprometer
arquivamento tão flexível que pode en- todo o trabalho.
contrar dezenas de aplicações no seu Se você tiver certeza de que quer abrir
dia-a-dia. Ele é muito útil, por exemplo, um novo arquivo, pressione S.
para armazenar os nomes e os endere- o arquivo já estiver armazenand
ços de amigos ou membros de um clu- e você não deseja apagá-los.
be, ou tomar notas dos aniversários da qualquer outra tecla, e o pro]
família e dos amigos, ou armazenar de- tornará ao menu principal.
talhes sobre suas coleçòes de moedas,
borboletas, discos ou receitas, ou até
0 TAMANHO DOS CAM"0S
mesmo organizar melhor a sua crescen-
te coleçào de jogos de computador.
O único limite para o que se pode fa- Uma vez que você lenha pressiona-
zer com esse programa está no tamanho do o S para continuar, o computador
da memória RAM do seu micro. Na perguntará quantos campos você quer.
maioria das vezes, o mínimo necessário "Campos" são os itens dc informação
para aplicações práticas é uma máqui- que você quer armazenados em cada re-
na com 32K. gistro. Por exemplo, se você quer regis-
Seja como for, é necessário lembrar trar dados sobre os seus amigos, pode-
sempre o seguinte: como as memórias riam ser definidos os seguintes campos:
dos computadores domésticos são pe- nome, endereço, cidade e número do te-
quenas, em comparação com as das má- lefone —quatro ao todo.
quinas profissionais, quanto menos vo- Este programa só permite um núme-
lumosa a informação a ser mantida pe- ro máximo de oito campos para um re-
lo computador, melhor. gistro individual; do contrário, ele não
poderia exibi-los, todos, na tela ao mes-
mo tempo. Uma vez fornecido o núme-
ro decampos a pergunta seguinte do
computador será: "Qual o nome do
Assim que você rodar o programa pe- campo 1?". (No exemplo acima, a res-
la primeira vez, através do comando posta poderia ser NOME.) De posse da informação sobre o pri-
RUN, o menu principal será imediata- A seguir, o programa pede a exten- meiro campo, o computador fará a mes-
mente impresso na tela. Ele consiste nu- são do primeiro campo, isto é, o núme- ma pergunta sobre o segundo campo, o
ma lista de coisas que se pode fazer com ro máximo de caracteres que ele pode terceiro, e assim por diante. Obviamen-
o arquivo, como "entrar um registro", conter. te, quanto menores forem os nomes dos

por exemplo, ou "pesquisar o arquivo". Aextensão máxima para qualquer campos e os números dos caracteres em
campo permitida no programa é de de- cada campo, mais registros poderão ser
zenove caracteres. Isso significa que, se retidos no arquivo.
a informação que se quer arquivar — Isto feito, o computador calculará
um endereço, por exemplo —
não cou- para quantos registros ele tem espaço na
Os computadores necessitam de de- ber nessa extensão, é preciso dividir o memória. Esse número será exibido na
talhes precisosdo que se quer, antes de campo em duas ou mais partes. No ca- tela. No programa para o TK-90X, vo-
qualquer operação. Para abrir um no- so de um endereço isso pode ser feito cê deve especificar quantos registros
vo arquivo é necessário primeiro dizer por meio da definição de campos sepa- quer armazenar, evitando que o compu-
ao computador o número de registros rados para a rua, número da casa, ci- tador gaste tempo excessivo gravando
'
que se quer e a extensão máxima que ca- dade, código postal, etc. ou lendo longos arquivos da fita.
2 ARUCAÇÒeS 2

- MANTENHA EM ORDEM AS MEMÓRIA DISPONÍVEL


~
SUAS C OLEÇOES ESTABELEÇA UM NOVO ARQUIVO
- UM PROGRAMA PRATICO DE - REVEJA SEU ARQUIVO
ARQUIVAMENTO DISPONÍVEL - COMO ARMAZENAR E

- UTILIZE EFICIENTEMENTE A "RECUPERAR INFORMAÇÕES

segue por toda a tela cada vez que você


digita uma informação e pressiona
< ENTER > ou < RETURN >. Quan-
do você tiver entrado o último campo do
registro, o computador irá para o pró-
ximo registro a ser entrado. Se você pres-
sionar a tecla < ENTER > ou < RE-
TURN > novamente, antes de começar
a digitar o primeiro campo, o computa-
dor trará o menu principal de volta.

EXAMINE OS REGISTROS

ra examinar os registros que voce


selecione a opção número 3 do
jncipal, "VER REGISTROS",
do a tecla 3. O
primeiro re-
,então exibido na tela não —
:nte o primeiro que você in-
o primeiro de acordo com
létodo de seleçào do

is de arranjo dos compu-


muito pouco. Mas, de
iodo geral, eles selecionam os registros
em ordem alfabética através do primei-
ro campo, o qual, em muitos casos, se-
rá "NOME". Para fazer isso, o com-
putador examina a primeira letra do pri-
meiro campo de todos os registros e os
ordena alfabeticamente. Se mais de um
registro tiver a mesma inicial, ele os or-
dena em função da segunda letra, e as-
sim por diante.
Quando o primeiro campo contiver
algarismos, o computador selecionará
sempre um deles antes de qualquer le-
tra; mas prosseguirá com o mesmo mé-
todo de ordenação, dígito por dígito,
bidos os nomes dos campos. O cursor quando estiver decidindo entre núme-
COMO ENTRAR UM REGISTRO ros, além de olhar para o número como
aparecerá na última linha do vídeo, de
tal modo que tudo que você escrever pe- um todo. Em
outras palavras, se você
Terminado o processo de criação de lo teclado será registrado no campo exi- colocar os números de 1 a 100 no pri-
um novo arquivo, o programa trará de bido. Lembre-se de manter a informa- meiro campo, por exemplo, o compu-
volta o menu principal, onde você deve ção digitada tão curta quanto possível tador ordenará em primeiro lugar os nú-
selecionar a opção 2 (tecla 2), para ini- e dentro da extensão máxima de carac- meros l, 10, 11, 12, 13, 14, 15, 16, 17,
ciar a entrada da informação em seus re- teres que você estabeleceu para cada 18, 19 e 100 antes de movimentar-se pa-
gistros. campo. ra o 2, 20, 21 ele. A maneira de se con-
,

No alto da leia. o computador man- Quando você pressionar a tecla < EN- tornar esse problema é evitar o empre-
teráuma contagem dos registros que vo- TER> ou < RETURN > , a informação go de números no primeiro campo ou
cê já entrou, juntamente com o espaço digitada será impressa próxima ao nome entrar os números com zeros à esquer-
total disponível na memória. Essa linha do campo. A linha inferior da tela será da, como, por exemplo: 001, 002 ,..010,
de informação dirá,por exemplo: "Vo- limpa pronta para o próximo
e ficará 011 ... até 100.
cê utilizou 10 dos 100 registros". campo. Esse procedimento começa com Quando, por outro lado, se utiliza
Logo abaixo disso-, na tela, serão exi- o primeiro campo no alto da tela e pros- uma mistura de letras maiúsculas e mi-
2 APLICAÇÕES 2

núsculas, o computador escolhe primei-


ro as maiúsculas. Assim, "ABC Limi-
tada" poderá ser antes de "Aarão e
Companhia". Dependendo do que o ar-
quivo de dados contiver, pode ser que
o mais conveniente seja você digitar to-
das as informações apenas em letras
maiúsculas, para resolver o problema.
Se o seu computador aceitar caracteres
acentuados, você poderá ter problemas
na ordenação, pois na codificação bra-
sileira para os caracteres (adotada, por
exemplo, para os micros da linha MSX)
as letras acentuadas aparecem depois
das minúsculas, na ordem alfabética.
Quando você pedir para ver os regis-
tros, aparecerão as seguintes opções:

PROSSEGUE RETORNA MENU

escritas na parte inferior da tela. Se vo-


cê pressionar a tecla P, o computador
exibirá o registro seguinte; se você pres-
sionar o R várias vezes, ele se movimen-
tará rapidamente através de todo o ar-
quivo, registro por registro.
Uma pressão na tecla R traz de volia
à tela o registro anterior ao exibido. As-
sim, usando apenas o P e o R, você po-
de percorrer o arquivo, registro por re-
gistro, para a frente e para trás. Já a te-
cla M provoca o retorno ao menu prin-
cipal, qualquer que seja o ponto onde
você estiver no arquivo.
Embaixo da primeira linha de opções
aparecerá uma segunda com as seguin-
tes alternativas:

CORRIGE APAGA IMPRIME


Essas funções não constam do atual
programa e serão explicadas no próxi-
mo artigo desta série. Portanto, nada
acontecerá se você tentar usá-las na pre-
sente versão do programa.

ARMAZENE ARQUIVOS NA MEMÓRIA dados. A única exceção é a versão para ção de gravação é atívada de forma di-
os micros da linha Sinclair, que gravam ferente da anterior. Neste caso. selecio-
À medida que você for entrando da- o programa juntamente com os dados ne primeiro a opção 7 (SAÍDA) no me-
dos nos registros do seu arquivo, eles se- em memória.
contidos nu principal. Em seguida, usando o co-
rão armazenados na memoria principal Quando você quiser salvar o seu ar- mando SAVE normal, digitado direta-
(memória RAM) do computador, den- quivo nos micros das linhas TRS-Color mente pelo teclado, acione o gravador e
tro do limite máximo no número de re- ou MSX, pressione a tecla 5 para sele- grave o programa, dando-lhe um nome
gistros, calculado pelo programa. É ne- cionar a opção de armazenamento no adequado. Os dados serão gravados con-
cessário, portanto, armazenar esse ar- menu principal, e o computador lhe pe- juntamente, conforme já foi explicado.
quivo em fita magnética, se você quiser dirá que dê um nome qualquer ao arqui- Posteriormente, quando quiser con-
desligar o computador; caso contrário, vo. Uma vez que você tenha teclado o sultar o arquivo, você deve (nos micros
perderá toda a informação digitada. nome do arquivo e pressionado <RE- das linhas citadas acima) carregar o
Posteriormente, quando você quiser TURN> ou <ENTER>, o computa- computador em doisestágios. Inicial-
modificar ou acrescentar dados, consul- dor pedirá que você posicione o grava- mente, é necessário carregar o progra-
tar ou listar o arquivo, poderá carregar dor para a gravação, apertando as teclas ma, utilizando o comando normal
de volta o arquivo para a memória KECORI» e PLAY, e pressionando = LOAD (ou CLOAD) de sua máquina.
RAM do computador, lendo-o em fita. <ENTER> em seguida. Enquanto gra- Em seguida, deve-se mandar executar o
Na maioria das versões do programa va,o computador mantém você infor- programa, acionando o comando RUN,
listadas abaixo, o menu principal ofe- mado. O tempo de gravação depende do e selecionar a opção 6 no menu princi-
rece as duas mencionadas opções ao número de registros a ser armazenado. pal, "CARREGAR ARQUIVO". O
usuário: gravar ou carregar o arquivo de Nos micros da linha Sinclair, a fun- computador pedirá então o nome do ar-
2 APUCAÇÕíS 2

quívo desejado. Quando você tiver te- 90 PRINT 6324 "6-CARREGAR ARQUI ,
2180 CL53:PRINT #235." ARQUIVO
clado o nome do arquivo e pressionado CHEIO ";:FOR G-l TO 5: SCREEN 0
,1: FOR F*l TO 500:NEXT
< RETURN > ou <ENTER>, a má 2190 SCREEN 0,0:FOR F-l TO 500:
quina ordenará: "POSICIONE 0 NEXT F.G: RETURN
GRAVADOR E PRESSIONE <EN- 120 INS-INKEYS:IF IN$<"l"OR INS 3000 RETURN REM LINHA TEMPORARI
:

TER> ". Feito isto, ele dirá novamen- >"7" THEN 120
te: "COLOQUE O GRAVADOR NA 130 IF INS <>"1" AND INS<>"6" A 4000 RETURN REM LINHA TEMPORARI
POSIÇÃO PLAY E PRESSIONE ND R-0 AND INSO"7"THEN 120
< ENTER > " 140 SOUND 30,1: CLS IN- VAL INS) : ( 5000 RETURN REM LINHA TEMPORARI
Assim que a fita cassete começar a 150 ON IN GOSUB 1000,2000.6000, A
rodar, o computador a examinará alé 5000.7000.8000,9000 6000 D-l
160 GOTO 30 6010 IF NR<1 THEN 6170
encontrar o arquivo que você deseja, o
1000 PRINT 641 "ABRIR UM ARQUIV .
6020 GOSUB 8500
qual será carregado (o que poderá de- 0" PRINT 6231. "VOCE TEM CERTEZA 6030 PRINT #451 "PROSSEGUE.
r
:

morar aigum lempo). Concluída a ope- (S/N) ?" ETORNA ffiENU CORRIGE a PAGA
ração, ele dirá que o arquivo foi carre- 1010 IN$-INKEY$:IF INS<>"S" AND IMPRIME"
gado corretamente. Se o arquivo que vo- IN$<>"N' THEN 1010 6040 INS C INKEYS:IF INS-"" THEN
cê quiser não estiver na fita, o compu- 1020 IF INS<>"S"THEN RETURN 6040
tador testará todos os arquivos que en- 1030 IF R>0 THEN RUN 9200 6050 IN-INSTRU.RS$,INS)
contrar nela, até o final. De qualquer 1040 CLS PRINT 641 "ABRIR UM AR
:
,
6060 ON IN GOTO 6080,6080.6090.
maneira, no final, o programa fará re- QUIVO" 6100,6110.6120,6130
1050 PRINT 6385 "NUMERO DE CAMP .
6070 GOTO 6030
tornar o menu principal. Só entào você
OSÍl-8)"; :INPUT A: A-ABStlNT(A) 6080 D-D+l:GOTO 6140
poderá selecionar a opção 6 novamente 6090 D-D-l :G0T0 6140
)
e procurar outro arquivo para carregar. 1060 IF A>6 OR A<1 THEN 1050 6100 RETURN
Nos micros da linha Sinclair, como é 1070 DIM A (A) ,NS (Ai 6110 GOSUB 3000:GOTO 6020
o caso do TK-90X, os dados e o progra- 1080 PRINT 6384."":PRINT 696."" 6120 GOSUB 4000:GOTO 6010
ma principal são carregados juntos. Uma :F0R N-l TO A 6130 GOSUB 10000:GOTO 6030
vez que tiver carregado o primeiro arqui- 1090 PRINT PRINT "NOME DO CAMPO" : 6140 IF D>NR THEN D-l
vo utilizando o comando LOAD
padrão, ;N: "7" LINEINPUT NS (N) :NS{N) -L
; : 6150 IF D<1 THEN D=NR
poderá carregar outros arquivos por EFTS(NStN) ,10) 6160 GOTO 6010
1100 PRINT "COMPRIMENTO DO CAMPO 6170 CLS3 PRINT6233. " ARQUIVO V
meio da opção 6 no menu principal.
:

" ;N: INPUT A (N) A (N -ABS { INT (A


: :
)
AZIO "
A versão do programa para compu- N) ) )
t

6180 FOR G-l TO 5 SCREEN 0 1 FO


: . :

tadores da linha Apple também lem fun-


1110 IF A(N)>19 OR A (N) <1 THEN
ções de menu iguais às dos micros já 1100
considerados. A única diferença é que 1120 TS-TS+AIN)
o programa utiliza arquivos em disque- 1130 NEXT:R-INT(11000/<S+5*A))-
te, para armazenamento e recuperação 1 PRINT" NUMERO MÁXIMO DE RÉGIS
:

de dados, pois não funciona satisfato- TROS-" ;R


riamente com fita cassete. 1140 DIM A5(H.A):FOR 1=1 TO 200
Os programas listados contêm gran- 0 NEXT RETURN
: :

des intervalos em seus números de linhas 2000 G-0


— da linha 2000 à linha 6000.
2010 IF NR-R THEN 2180
2020 NR-NR+1
COMO TORNAR UM PROGRAMA
Todavia, isso foi feito intencional- 2030 CLSiPHINT 60 "VOCE USOU "; . LONGO MAIS FÁCIL DE DIGITAR
mente. Digite os programas exatamen- Digitar um programa longo escrito
NR-1;" DOS ";R;" REGISTROS DISP
tecomo estão, pois as linhas que faltam por outra pessoa pode ser uma tarefa
ONIVEIS" bastante trabalhosa e desanimado-
serão utilizadas para incorporar as par- 2040 FOR N-l TO A PRINT #32*N+3 :

ra, mesmo para os mais persistentes.


tes responsáveis pelas funções de modi- 2,NS(N)i" '":PRINT 6448,""íPRIN
T 6416,
"" Mas você pode torná-la mais fácil, e
ficação, apagamento, impressão e cru- gratificante, digitando apenas uma cur-
zamento de informações dos registros. 2050 PRINT 6416. "(ATE ";A(N);"C
ta seção de cada vez e testando-a em
Os detalhes dessas opções estão no
ARACTERES) ";:LINE INPUT AS (NR
seguida.
. N)
próximo artigo desta série. Alguns programas estão estrutura-
2060 IF AS (NR N) - " " AND N-l TH .

EN N=A:G=1 GOTO 20B0 :


dos em seções ou módulos mais ou
menos independentes, tais como sub-
2070 AS (NR N) -LEFTS (AS (NR N) A. , ,
rotinas, procedimentos e laços, mas se
N)):PRINT #32*N+45,AS(NR.N>
2080 NEXT você não conseguir identificá-los digi-
20 PCLEAR1 : CLEAR 1 1000 RSS-" P R
: te apenas seções curtas de 20 ou 30
MCAI" :BS-CHRS (12B) 2090 IF G-l THEN 2160
linhas.
30 CLS:PRINT632.STRINGS<8,BS) ;" 2100 C-NR:FOR F-l TO 150:NEXT:I
F NR-1 THEN 2150
Quando nada se sabe de programa-
MENU" STRINGS
; t 3 " "); "PRINCIPAL
.

ção BASIC, a chance de errar uma li-


2110 IF AS(C.1)>-AS(C-1.1) THEN
";STRINGS(8,BS) nha e não perceber é relativamente
40 PRINT 6164, "1-ABRIR UM ARQTJI
2150
grande, pois a mudança de apenas um
VO" 2120 FOR N-l TO A:XS-AS(C.N) :AS
pequeno sinal ou letra já é suficiente
50 PRINT #196 " 2- ENTRAR COM UM
, (CN)-AS(C-l.N) :AS(C-1.N)'XS:NE
para impedir que o programa funcione
REGISTRO" XT:C-C-1 corretamente.
2130 IF C-l THEN 2150
60 PRINT ê228."3-VER REGISTROS" Eis aí um bom incentivo para você se-
2140 GOTO 2110
70 PRINT 6260, "4-0PCAO DE PROCU guir também o curso de programação
2150 GOTO 2010
RA-
2160 NR-NR-1 BASIC de INPUT, de modo sistemáti-
BO PRINT 6292."5-SALVAR ARQUIVO co e desde o começo.
2170 RETURN
" ' ; : P : . ;

IIIIIIIIIIIMHH^W" ' •'tiiiiií

R F-l TO 300:NEXT:SCREEN 0 0 FO , : 9210 GOSUB 8060


R F-l TO 300:NEXT F G RETURN , : 9220 BS-CHRS (128) :HSS-"P RMCAI"
7000 AUDI00N:MOTOR0N: CLS: PRINT :GOTO 30 doa r egi
ê65 "POSICIONE 0 GRAVADOR E PRE
.
10000 PRINT 6451," CHEQUE IMP
SSIONE <ENTER>" ; RESSORA cONT * 2110 FOR N-V TO A: PRINT INVER
7010 INS-INKEYS:IF INSOCHRSU3 10010 PRINT 6460." SE V;AT V+N*2.U;NS(N) INVERSE ;

) THEN 7010 0;AT V+N*2.12; FLASH V:"?": INP


7020 MOTOROFF PRINT 6129,"COLOQ: 10020 INS-INKEYS:IF INS-"" THEN UT "(ate ";(A(N));" caracteres)
UE O GRAVADOR EM POSIÇÃO REC ' 10020 ", LINE AS(C.B(N)+V TO B(N+V)):
E PRESSIONE <ENTER>"; 10030 IF INS<>"C" THEN RETURN PRINT AT V+2"N.12;AS(C,B(N)+V
7030 IN$-INKEYS:IF INSOCHR$(13 10040 FOR Y-0 TO A+4 FOR X-0 TO : TO B (N+V) NEXT N
) :

) THEN 7030 31 P-PEEK (1024+X+Y*32) IFP>95


: : 2120 FOR F-V TO 150: NEXT F: IF
7040 PRINT: INPUT" NOME DO ARQUI AND P<127 THEN P-P-64 C-V THEN RETURN
VO ";FIS 10050 IF P>0 AND P<27 THEN P-P+ 2130 LET N-C
7050 CLS6:PRINT 6232 "GRAVANDO ,
96 2140 IF AS(C)>-AS(C-V) THEN RE
*;FI3; 10060 IF P-0 THEN P-32 TURN
7060 MOTORON FOR 1-1 TO 1000:NE
:
10070 PRINT *-2,CHRS(P) NEXT ; : :
2150 LET XS-ASÍC): LET AS(C)"AS
XT RINT#-2,CHRS(13) NEXT ; :
(C-V): LET ASIC-Vl-XS: LET C-C-
7070 OPEN"0",#-l.FI$ 10080 FOR N-l TO 3 PRINf#-2 CHR : .
V: IF C-V THEN RETURN
7080 PRINT|-1,FI$,R,A.NR S (13) :NEXT 2160 GOTO 2140
7090 FOR N = l TO A:PRINT#-1,NS(N 10090 RETURN 2500 CLS PRINT FLASH 1 AT 10
:

CHEIO
;

) , A (N) :NEXT ,2;"ARQUIVO


": FOR F-V TO 400: NEXT F: RE TU
7100 C-l
7110 IF AS(C.1)="" THEN 7140 RN
7120 FOR N-l TO A PRINT|-1 AS (C LET V-l 3000 LET D-V: IF AS(V,V)-" " TH
: . 5 LET R-0: LET U-0 :

,N) : NEXT 10 BORDER V: PAPER V; INK 7:


EN RETURN
7130 C-C+1:GOTO 7110 POKE 23609,20: POKE 23658,8 3010 IF D-U THEN LET D-V
3015 IF D-V-R THEN LET D-D-V
7140 CLOSE#-l RETURN : 100 CLS PRINT INVERSE V AT
: ;

8000 CLS :PRINT670 "VOCE TEM CER ,


V,10; "MENU" 3020 IF AS(D.V)-" " THEN LET D
-D-V
TEZA (S/N)?" 110 PRINT AT 5,6;"1-Abrir um a
8010 INS-INKEYS IF IN$<>"S" AND : rquivo" TAB 6;"2-Entrar com
'
'
3030 GOSUB 9500
INSO-N" THEN 8010 um registro" TAB 6;"3-Ver reg 3040 IF OP-V THEN LET D-D+V: G
8020 IF INS-"N" THEN RETURN istro3"''TAB 6,"4-Opcao de pro OTO 3010
8030 AUDI0ON:MOTORON:CLS:PRINT cura" TAB 6; "6-Carregar argui
'

'
3050 IF OP-2 THEN LET D-D-V C :

665 "POSICIONE O GRAVADOR E PRE


.
VO""TAB 6;"7-Salda";#V;TAB 6; OTO 3010
SSIONE <ENTER>" "-SELECIONE 0PCAO-" 3060 IF OP-3 THEN RETURN
8040 INS-INKEYS IF INSOCHR$(13 : 500 LET IS-INKEYS IF IS-"" :
3070 IF OP-4 THEN GOSUB 8000
) THEN 8040 THEN GOTO 500 3080 IF OP-5 THEN LET MD-V GO :

8050 MOTOROFF: PRINT 6129,'COLOQ 510 IF IS<"1" OR IS>"7" THEN SUB 9000: IF D-U THEN RETURN
UE O GRAVADOR NA POSIÇÃO PLA * GOTO 500 3090 GOTO 3030
520 IF R-U AND 1S<>"1" AND 4000 RETURN REM LINHA TÊMPORA
E PRESSIONE <ENTER>
- :
¥
8060 INS-INKEY$:IF INS<>CHRS(13 IS <>"6" AND IS<>"7" THEN RIA
) THEN B060 GOTO 500 5000 INPUT "Digite o nome do ar
8070 IF R>0 THEN RUN 9210 530 SOUND .1,10: CLS GOSUB : (
QUÍVO "; LINE QS: IF LEN QS<V
8080 INPUT " NOME DO ARQUIVO" :F CODE IS -48)"1000: GOTO 100 OR LEN QS>10 THEN GOTO 5000
IS 1000 PRINT AT 7,8i"Voce tem cer 5010 SAVE QS LINE 10: RETURN
6090 CLS7:PRINT 6231 .
" PROCURAND teza?": PAUSE U: IF INKEYS- T 6000 PRINT AT 8,U;"Digite o no»
O "í HEN GOTO 1000 e do arquivo a sercarregado
8100 OPEN "I" í-1 FIS ou somente <ENTER> para carrega
. . 1010 IF INKEYS<>"S" THEN RETUR
Pt rgui'
6110 INPUT l-l.FIS N
1

8120 PRINT §231." ACHEI ":FIS; 1020 PRINT INVERSE V AT 10,5;" ;


6010 INPUT LINE XS: IF LEN XS>
CRIAR UM NOVO ARQUIVO " 10 THEN GOTO 6010
6130 INPUT I - 1 R A NR . . , 1030 INPUT AT 0.0; "Numero de ca 6020 PRINT AT 1 3 U "PRESSIONE P .
;

8140 DIM ACA) NS (A) AS (R A) , , mposd-8)? ";A: IF a<l OR a>8 T LAY NO GRAVADOR": LOAD XS
8150 FOR N-l TO A INPUTi-1 NS (N : . HEN GOTO 1030 7000 PRINT AT 10,B;"Voce tem ce
) A (N) NEXT
. : 1040 DIM AIA); DIM B (A+V) DIM :
rteza?": IF INKEYS-"" THEN GOT
8160 C-l NS(A,10); LET T-U FOR N-V TO A :
O 7000
6170 IFEOF (-1) THEN 8200 1050 INPUT AT 0,0;"Nome do camp 7010 IF INKEYS<>"S" THEN RETUR
8180 FOR N-l TO A: INPUT i-l.ASÍ o "; (N) ;" ? ": LINE NS (N) N
C.N) 1060 INPUT AT V,0;"Comprimento 7020 RAND USR U
6190 NEXT: C=C+1:GOTO 8170 do campo " (N) " ? " ;A(N)
;
;
IF A :
8000 RETURN : REM LINHA TÊMPORA
8200 CLOSE |-1:RETURN (N)>50 THEN GOTO 1060 RIA
8500 CLS PRINT60 "NUMERO DO REG
:
,
1070 LET B(N)-T: LET T-T+A (N) 9000 RETURN REM LINHA TÊMPORA
:

ISTRO";D:FOR N-l TO A PRINT «32 : NEXT N: LET B (N) -T RIA


*N+32.NS(N) ;" :";TAB(13) ;AS(D.N 1080 PRINT AT 16.2;"Egpaco para 9500 PRINT AT U U "Registro num ,
;

[PEEK 23730+256*PEEK 2 ero ":D;" ": FOR N-V TO A: PRI


) NEXT: RETURN
: ";INT ( (

9000 CLS4 PRINT 670. "VOCE TEM


: 3731)-29500)/T) ;" registros" NT INVERSE V;AT V+2*N U ;NS (N) ,

CERTEZA (S/N)?": 1090 INPUT "Quantos registros? INVERSE U TAB 1 2 AS (D. B (N) +V T
; ;

9010 INS-INKEYS :IF INSO"S" AND ";R: DIMASÍR.T): RETURN O B (N+V) NEXT N
) :

IN$<>"N" THEN 9010 2000 LET C-V 9510 PRINT INVERSE V;AT 20, U;"
9020 IF INS-"N" THEN RETURN 2010 IF A$(C,V)-" - THEN GOTO P (rosaegue) R (e torna) M(enu)
90 30 CLS END : 2100 E(menda) A(paga) Idnprim
9200 GOSUB 1040:GOTO 9220 2020 IF C-R THEN GOTO 2500
) ; > ::

2 APUCAÇÕES 2 IIIIHIII
9520 IF INKE YS= " " THEN GOTO 95 U PRINCIPAL" 140 PRINTCHRS17) : CLS IN-VAL IN
: (

20 40 LOCATE 9.5: PRINT" 1 -ABRIR UM


:
S)
9530 LET VS-INKEYS: IF MS'"!' T ARQUIVO" 150 ON IN GOSUB 1000,2000.6000.
HEN COPY LPRINT
: LPHINT
: L : 50 LOCATE 9.7:PRINT"2:-ENTRADA 5000.7000.8000,9000
PRINT GOTO 9520
; DE REGISTROS" 160 GOTO 30
9540 LET OP-U: IF VS-"P" THEN 60 LOCATE 9.9:PRINT"3;-LISTAR R 1000 LOCATE 7.0: PRINT"MONTAR UM
LET OP-V: LET E10-V EGISTROS" NOVO ARQUIVO" LOCATE 7,14:PRIN :

9550 IF VS-" THEN LET OP-2: 70 LOCATE 9,11:PRINT"4:-BUSCA D T"VocS tem certeza (S/N)?";
LET MO--V E INFORMAÇÕES" 1010 INS-INKEYS IFINSO"S"ANDIN :

9560 IF VS-" THEN LET OP-3 80 LOCATE 9,13: PRINT" 5 -GRAVAR


:
$0"N"THEN 1010
9570 IF V5-" THEN LET OP-4 UM ARQUIVO" 1020 IFINSO"S"THEN RETURN
9580 IF VS-" THEN LET OP-5 90 LOCATE 9,15: PRINT" 6 -CARREGA
:

1030 IFR>0THEN RUN 9200


H UM ARQUIVO" 1040 CLS: LOCATE 7,0: PRINT"MONTA
100 LOCATE 9.17:PRINT"7:-FIM DE H UM NOVO ARQUIVO"
PROGRAMA" 1050 LOCATE 4,2: PRINT "Número de
"
110 LOCATE 14,19:PRINT"OPÇAO: campos (1-8) " INPUT A:A-ABS< : :

INT(A)
1
120 INS-INKEYS:IF INS<" "ORINS> 1060 IF A>8 OR A<1 THEN1050
10 KEYOFF HOTOHOFF
: "7"THEN120 1070 DIM A (A) ,NS (A)
20 CLS:CLEAR:RS-"P RMCAI" 130 IFINS<>"l"ANDINSO"6"ANDINS 1080 LOCATE 0 6 FOR N-1TOA , :

30 CLStLOCATE 5,1: PBINT" M E N O "


7
"ANDR-0THEN 120 1090 PRINT PHINT H Nome do campo
:

";N:"7 "; LINEINPUTNS (N) :NS(N)-


:

LEFTSÍNS(N) ,10)
1100 PRINT"Tamanho do campo ";N
;:INPUTA(N) :A(N) -ABS INT {A (N) ( )

1110 IFA<N)>25ORA(N)<lTHEN1100
1120 TS-TS+A(N)
1130 NEXT:R-INT(3000/(TS+3*A))
PRINT PRINT" Número máximo de re
:

2000 G-0
2010 IFNR-RTHEN2190
2020 NR-NR+1
2030 CLS PRINTNR-1 " de ";R;"
:
;
r

2040 FORN-1TOA:LOCATEO,N*2+2:PR
INTNS (N) " " :LOCATE0, 22:PRINTC
:
i

HRS(5) :LOCATE0,23:PRINTCHRS (5)


;

2050 LOCATEO,23:PRINT"Até ":A(N


) "
;
caracteres"
2060 LOCATE 0 21 PRINTCHRS (211 , : í

LINEINPUTAS (NR N) ,

2070 IFAS (NR N) "ANDN- 1THENN-A


.

:G-1 :GOTO209O
2080 AS(NR.NI-LEFTS(AS(NR.N) .A(
NI :LOCATE12,N*2+2:PRINTAS(NR,N
)

2090 NEXT
2100 IFG-1THEN2170
2110 C-NR:FORF-1T0500:NEXT:IFNR
-1THEN2160
2120 IFAS(C,1)>-AS(C-1,1)THEN21
60
2130 F0RN-1T0A:SHAPAS(C.N) ,AS(C
-1,N) :NEXT:C-C-1
2140 IFC-1THEN2160
2150 GOTO2120
2160 GOTO2010
2170 NR-NR-1
2180 RETURN
2190 CLS:LOCATE10,15:PRINT"ARQU
IVO CHEIO FORF-lTO1000:NEXT
2200 RETURN
3000 RETURN REM LINHA TEMPORARI
k
4000 RETURN REM LINHA TEMPORARI
A
5000 RETURN (EM LINHA TEMPORARI
A
6000 D-l
" o N

2 APLICAÇÕES 2 MIM
6010 IFNIK1THEN6170 8130 INPUT»1.R,A,NR 15: HTAB 10: PRINT " VOCE CONF
IRMA? (S/N) ";
6020 GOSUB8500 8140 DIMA{A) .NS (A) AS (R.A) .

6030 LOCATE3,22:PRINT"[P]roaseg 8150 FORN-lTOA:INPUT|l,NS!N) ,AI 1005 NORMAL


[Rletorna [M]enu [Cio N) NEXT 1010 GET IN$: IF INS < > "S"
ue :

rrige [Alpaga I Jmpr ime" ( 8160 C-l AND INS < > "N" THEN 1010
8170 IFEOF tl) THEN8200 1020 ÍF INS < > "S" THEN RET
6040 INS-INKEYS:1FINS-""THEN604 81B0 FORN-1TOA: INPUT#1 AS (C,N) . URN
0 8190 NEXT C-C*l G0TO81 70: : 1030 IF R > 0 THEN CLEAR DS !

6050 IN-INSTR(1,RS.INS) 8200 CLOEEtl RETURN - CHRS [4):IN - 1: HOME GOTO :

6060 ON IN GOTO 6080,6090,6090. 8500 CLS PRINT" Número do regiat


: 150
6100.6110,6120,6130 TO ->" ;D: FORN-1TOA: LOCATE0 N*2+ , 1040 HOME HTAB 8: INVERSE : :

6070 GOT06030 2:PRINTNS (N) " " LOCATE1 3 PRI ; :


i : : PRINT " MONTAR UM NOVO AKQUIVO
6080 D-D+l :COTO6140 NTAS(D.N) NEXT RETURN : :
" NORMAL
:

6090 D-D-l :GOTO6140 9000 CLS LOCATE10 15 PRINT"Voc8


: . : 1050 VTAB 3: HTAB S: PRINT "NU
" INPUT
6100 RETURN tem certeza? (S/N) MERO DE CAMPOS (1-8):
6110 GOSUB3000:GOTO6020 9010 INS-INKEYS IFINSO " S" ANDIN : A
6120 GQSUB4000:GOTO6010 SO"N"THEN9010 1060 IF A > 8 OR A < 1 THEN 10
6130 GOSUB10000:GOTO6020 9020 IFNS-"N" THENRETURN 50
6140 IFD>NRTHEND-1 9030 CLS END ! 1070 DIM A (A) .NSÍA)
6150 IFD<1THEND-NB 9200 GOSUB1040:GOTO9220 1080 VTAB 7: FOB N - 1 TO A
6160 GOTO 6010 9210 GOSUB8080 1090 PRINT "NOME DO CAMPO ";N;
6170 CLS:LOCATE10,15:PRINT"ARQU 9220 RS-"P RMCAI" " ";; INPUT NS(N!:NS<N) - LEFT
IVO VAZIO!" 10000 CLS LOCATE10 .15: PRINT"CHE
: S (NS (N) 10) ,

6180 FORF- 1TO5O0 NEXT RETURN : : QUE A IM PRESO RA" 1100 PRINT "TAMANHO DO CAMPO "
7000 MOTOR CLS LOCATE0 5 PRINT"
! : , : 10010 PBINT LOCATE1 2 PRINT" AL IN : : :N|" " ! INPUT A (N) :A(N) = ABS
:

Posicione a fita e tecle [retur HE O PAPEL" INT (A(NÍ)l


(
"
n]" 10020 INS-INKEYS IFINKES* "THEN : 1110 IF A (N) < 1 OR A (N) > 25
7010 INS-INKEYS:IFINS<>CHRS(13) 10020 THEN 1100
THEN701O 10040 LPRINT L PRI NT "Re o l s t r o nú : 1120 TS - TS + AINÍ PRINT :

7020 MOTOR PRINT PRINT: PB I NT "Co


: : mero "sD 1130 NEXT :R - INT (( FRE 10)
logue o gravador em modo de gra 10050 FORX-1TOA: LPRINT LPRINT N :
- 5000) / (TS + 2 * A) IF R ) :

vaçâo e pressione [return]" S(X) ;" :" :AS(D.X) NEXT : > 4000 THEN R - 4000
7030 INS-INKEYS IFINSOCHRS (13) :
10060 LPRINT LPRINT LPRINT LPRI : : :
1135 R - 3: REM B ET IRAR ESTA L
THEN7030 NT INHA! í!!!!!!!!!!!!!********""*
7040 PRINT:INPUT"Noine do arquiv 10070 CLS RETURN :

o ";FLS FS-"CAS: "+FLS


: 1140 PBINT PBINT "NUMERO MAX :

7050 LOCATElQ,22:PRINT"Gravando IMO DE REGISTROS: ";R


si 1150 DIM AS(R.A): FOR I - 1 TO
7060 MOTOR:FORI-lTO1000:NEXT 20 TEXT : CLEAR : DS - CHRS [4 2000: NEXT RETURN :

7070 OPEN FLS FOR OUTPUT A3#l )


2000 G - 0
7080 PRINT #1 FLS " " iR.A.NR ,
; .

25 ONERR GOTO 11000 2010 IF NR R THEN 2180: REM =*

7090 FORN=ilTOA:PRINT»l,NS(N) " ; ,


30 HOME VTAB 1: HTAB 6: INVE
:
CHECK GOTO
";A(N) NEXT :
RSE PBINT
: PRI "MENU 2020 NR - NR + 1
2030 HOME PRINT NR - li" DE
7100 C-l N C I P A L " NORMAL :
:

7110 IFAS(C.1)-""THEN?140 40 VTAB 5: HTAB 10: PRINT "1 ";B;" REGISTROS EM USO"
7120 FOHN-lTOA;PRINT*l,AS(C,Nj ABRIR UM ARQUIVO" 2040 FOR N - 1 TO A: VTAB N *
NEXT 50 PRINT HTAB 10: PRINT "2 :
2 + 2 PRINT NS (N) " " VTAB 23
: ; : :

7130 C-C+l :GOTO7110 ENTRADA DE REGISTROS" : CALL - 958


7140 CLOSE I 1 RETURN :
60 PRINT HTAB 10: PRINT "3 ;
2050 VTAB 24: PRINT "ATE ";A(N
8000 CLS LOCATE1 0 .15: PBINT" Você );" CARACTERES" VTAB 23: HTAB
:
LISTAR REGISTROS" : :

PRINT HTAB 10: PRINT "4 1 INPUT AS (NR.N)


8010 INS-INKEYS:IFINSO"S"ANDIN
70
BUSCA DE INFORMAÇÕES"
:

2060
:

IF AS (NR N) - AND N - .
"
SO"N"THEN8010 80 PRINT
n
HTAB 10: PRINT 5 :
1 THEN NR - NR - 1 BETURN :

GRAVAR 0 ARQUIVO" 2070 AS (NR N) - LEFTS (AS (NR .

8020 IFINS-"N"THENRETURN
.

90 PRINT .HTAB 10: PBINT "6 ),A(N)): VTAB N * 2 + 2: HTAB 1


8030 MOTOR:CLS:LOCATE0,3:PRINT"
CARREGAR UM ARQUIVO" 3: PRINT AS (NR N) ,

Posicione a fita e tecle [retur NEXT


100 PRINT HTAB 10: PRINT "7: !
2080
2090 IF AS(NR,1) > - AS (NR -
8040 INS-INKEY$:IFINSOCHRS 13) (
-FIM DE PROCRAMA"
THEN8040 110 VTAB 20: HTAB 15: PRINT "O 1,1) THEN 2150
8050 MOTOR LOCATE0 7 PRINT" Col
: , : pcAifrT /OlOJI 2100 FOR C - NB TO 2 STEP - 1
que o gravador em modo de repro 120 GET tyF V"^ 2110 FOR N - 1 TO A:XS - AS(C.
duçag e tecle (return)" 130 IF IN9 <Tl'l0R INS > "7" N):AS(C,N> - AS(C - 1,N):AS(C -
8060 IN$-INKEYS:IFINSOCHRSÍ13) THEN ) ' a> "1"
\ J l.N) - XS: NEXT
THEN8060 135 IF R - 0 AND INS < > *9120 NEXT
8070 IFR>0THENRUN9210 AND INS < > "6" AND INS < >
* 2150 FOR F - 1 TO 1000: NEXT '
:

8080 PRINT: INPUT"Nome do arquiv 7" THEN 110 QOTO 2010


O ":FLS:FS-"CAS:"+FLS \ 0 140 PRINT CBR$ 17) HOME IN 2180 VTAB 3: HTAB 1: CALL - 9 : :

8090 LOCATE10,22:PRINT"Procuran - VAL <INS) 58: VTAB 15: HTAB 10: FLASH P :

"
do. .
.
150 ON IN GOSUB 1000.2000.6000 RINT " ARQUIVO CHEIO!
8100 OPEN FS FOR INPUT AS#1 ,5000 7000 8000,6520
, , 2190 PRINT CHRS (7): FOR F
8110 INPUT ( 1 FLS . 160 GOTO 3%,/V y, 1 TO 10O0: NEXT PRINT CHRS : (

, 8120 CLS:LOCATE 10 15 PRINT" Ach . : 1000 HTAB 8: INVERSE PRINT " 7) RETURN : :

ei ":FLS MONTAR UM NOVO ARQUIVO ": VTAB 3000 RETURN REM LINHA TEMPO :
; ( (

2 APLICAÇÕES 2

RARIA 10000: GOTO 6020 CARREGAR DADOS"


4000 RETURN : BEM LINHA TEMPO 6130 IF INS - "A" THEN GOSUB 6020 PRINT HTAB 5: INPUT "NO
:

RARIA 4000: GOTO 6020 ME DO ARQUIVO ->" ;ARS


5000 RETURN REM LINHA TEMPO
: 6140 IF INS - "C" THEN GOSUB 8025 HTAB 5: PRINT "CONFERE ?
RARIA 3000: GOTO 6020 " GET INS
; :

6000 IF NR < 1 THEN VTAB IS: 6150 GOTO 6060 8027 IF INS < > "S" THEN GOT
HTAB 12: FLASH PRINT " ARQUIV : 6500 VTAB 1 HTAB 1 CALL - 9
: : O 30
58: PRINT "NUMERO DO REGISTRO - PRINT DS "OPEN" :ARS
;

O VAZIO! FOR F - 1 TO 1000: 8030


PRINT D: NORMAL PRINT DS "READ" ARS ;

NEXT RETURN
:
>";: INVERSE : 8040 :

6010 D - 1 6510 FOR I - 1 TO A: VTAB I * 8050 INPUT R A NR: DIM AS(R.A)


, ,

6020 POKE 35,22: VTAB 23: INVE 2+2: PRINT NS(I);: HTAB 13: P
RSE HTAB 4: PRINT "P";: HTAB
: RINT AS(D,I): NEXT RETURN : 8060 FOR I - 1 TO A: INPUT NS

18: PRINT "R* HTAB 32: PRINT


; : 6520 END I) ,A(I) NEXT
:

"M* 7000 HOME VTAB 10: HTAB 10:


: 8066 FOR J - 1 TO NR
6030 VTAB 24: HTAB 8: PRINT "C PRINT "GRAVAR O ARQUIVO" 8069 FOR I = 1 TO A
";: HTAB 20: PRINT "A";: HTAB 3 7005 PRINT PRINT HTAB 5: I
: :
8071 INPUT ASÍJ.I): NEXT NEX :

0: PRINT "I": NORMAL : NPUT "NOME DO ARQUIVO ->";ARS T


6040 VTAB 23: HTAR l PRINT "R : 7010 PRINT HTAB 5: PRINT "CO
:
B073 PRINT DS:"CLOSE";ARS
OSSEGUE";: HTAB 19: Pf:TNT "ETOR NFERE 7 " GET INS
: :
8078 GOTO 30
NA":: HTAB 33: PRINT "ENU" 7015 IF INS < > "S" THEN RET 10000 HOME VTAB 23: HTAB 9:
:

"
6050 VTAB 24: HTAB 9: PRINT "O URN PRINT " CHEQUE A IMPRESSORA!
RRIGE" HTAB 21: PRINT "PAGA":
; :
7020 PRINT PRINT DS;"OFEN";A
:
10010 HTAB 12: PRINT " ALINHE
: HTAB 31: PRINT "MPRIME" RS: PRINT DS "DELETE" :ARS
;
O PAPEL ";
6060 GOSUB 6500 7030 PRINT DS:"OPEN":ARS 10015 GET INS
7040 PRINT DS "WRITE" ARS :
10020 VTAB 1: PRINT PRINT C
6070 GET INS ;
:

6080 IF INS - CHRS (32) OR IN 7050 PRINT R PRINT A: PRINT N


:
HRS (4) i"PR*l"
3 - "P" THEN D - D + 1: IF D > R 10030 PRINT PRINT "REGISTRO :

NR THEN D - 1 7055 FOR I - 1 TO A: PRINT NS NUMERO ";D


6090 IF INS - "R" THEN D - D
- I) :PRINT A(I) NEXT : 10040 FOR X - 1 TO A: PRINT :

l: IF D < 1 THEN D - NR 7060 FOR J - 1 TO NR PRINT NSÓU:" :"l TAB 15);AS<C (

6100 IF INS < > "I" AND INS < 7070 FOR I - 1 TO A ,X) NEXT :

> "A" AND INS < > "C" AND IN 7080 PRINT AS(J.I): NEXT NEX : 10050 PRINT PRINT PRINT : : :

S < > "M" THEN 6060 T PRINT PRINT :

6110 POKE 35.24 7090 PRINT DS:"CLOSE";ARS 10055 PRINT CHRS t4);"PH|0"
6115 IF INS - "M" THEN RETURN 7100 RETURN 10060 HOME RETURN :

8000 CLEAR :DS - CHRS (4) 11000 PRINT DS;"CL05E": GOTO 2


"
6120 IF INS - "I" THEN GOSUB 8010 VTAB 10: HTAB 10: PRINT 0

O QUE E UMA BASE DE DADOS.'


O programa de arquivamento de quivo de índice por autores, o arqui- formas têm pelo menos uma carac-

dados listado neste artigo e no pró- vo de índice por assuntos, o arquivo terística em comum: a subdivisão do
ximo pode ser muitos
utilizado em ti- de nomes de revistas, e assim por arquivo em registros individuais.
pos de aplicações, pois o usuário tem diante. Todos eles podem ser inter- A forma pela qual esses registros
a oportunidade de definir, ele mes- relacionados por meio de um ou mais (ou os campos do registro) são orga-
mo, os campos ou diferentes itens de eampOS em comum (por exemplo, o nizados é que difere de caso para
informação que constituirão a ficha número de lombo do artigo, e o có- caso. Na verdade, a organização de
de cadastramento a ser usada. digo da revistei). uma base de dados é ditada pelo
Em computação, esse tipo de sis- Entretanto, podemos considerar, programa aplicativo que a controla.
tema flexível, ou programável pelo de forma simplificada, que uma ba- A forma de organização mais co-
usuário final, è comumente chama- se dedados com apenas um arquivo mum para uma base de dados é a
do de sistema gerenciador de base dc também pode cair nessa definição. É chamada estrutura relacional. Ela é
dados: além de possuir as funções es- o caso do programa listado em BA- bastante fácil de entender e muito in-
SIC neste artigo. tuitiva, pois se equivale a uma tabe-
senciais de qualquer sistema de cadas-
A única condição essencial para la, ou planilha de dupla entrada, com
tramento. esse sistema também tem
um módulo de criação do lay out do que ele continue sendo chamado de linhas e colunas. Essa tabele é cha-
arquivo, conforme o uso que ele terá. um sistema gerenciador de base de mada de relação, dai o nome da es-
dados é que o usuário possa definir trutura. Como você já deve ter per-
Uma base de dados, na definição
mais estrita do termo, é um conjun- livremente os campos de informação cebido, o programa listado neste ar-
to de arquivos de computador, que que quer ter em cada ficha (desde tigo é uma base de dados relacional.
tem a mesma finalidade do ponto de que, é claro, sejam respeitados os li- Na estrutura relacional, as linhas
vista do armazenamento e recupera- mites intrínsecos do programa). da tabela correspondem sempre aos
ção de informações. Normalmente, registros (por exemplo, cada livro de
portanto, uma dessas bases inclui MODEL OS DE BA SES DE DA DOS uma biblioteca), ao passo que as co-
mais de um arquivo: por exemplo, lunas correspondem aos diversos
em uma base de dados bibliográficos Existem diversas formas de orga- campos (tais como o nome do autor,
(artigos de revistas), lenamos o arqui- nização da informação em uma base o título da revista, o ano de publica-
vo-mestre, ou arquivo-tombo, o ar- de dados. Normalmente, todas as
IIIIIIIIIIIHHa^MHi^MHmillllllllll
Universalmente adotados, os sinais de
trânsito servem para orientar o

fluxo do tráfego. No mundo dos micros,

os comandos GOTO e GOSUB


cumprem uma função semelhante.

Uma das instruções mais importantes


em programação BASIC é o GOTO ("vá
para", em inglês). Sua função é alterar
malmente é digitada como uma só ex-
pressão. Nos micros da linha Sinclair,
você pressiona a tecla marcada GOTO
QDS
30 GOTO 125
o fluxo de execução de um programa, de para entrar a instrução no computador.
modo que, ao invés de simplesmente exe- Em outros tipos de micros, você digita Em alguns computadores, como os
cutar as linhas do programa em ordem GOTO sem o espaço entre GO e TO. da linha Sinclair, em vez de um núme-
linear, o computador salta para a linha A palavra GOTO deve ser sempre se- ro, podemos ter uma expressão ou equa-
indicada na declaração GOTO. guida pelo número da linha para onde ção de cálculo (inclusive o nome de uma
Embora possa aparecer na tela como você quer que o programa salte, como variável), que assume um valor numé-
duas palavras separadas, GOTO nor- no exemplo abaixo: rico quando o programa é rodado.
;

IIIIIIIIIIIUMH llllllllll
GOTO E GOSUB NA PRÁTICA DESVIOS EM UM PROGRAMA
PROGRAMAS PARA CALCULO, UTILIZAÇÃO EM DESVIOS
ADIVINHAÇÃO DE NOMES COMPLEXOS
E JOGOS DE DADOS COMO ACELERAR AS SUB-
QUANDO E COMO CRIAR ROTINAS

Digite o programa abaixo usando so-


40 GOTO 10
mente maiúsculas, se o seu computador
for compatível com o ZX-81:
Na linha 20, a função SQR é utilizada
para extrair a raiz quadrada (SQR é a
abreviatura de square root, expressão in-
glesa que quer dizer exatamente "raiz qua-
drada") do que está entre parênteses, ou 20 FOR 2-1 TO 3
seja, a expressão toda significa: "extraia
a raiz quadrada de A ao quadrado mais
B ao quadrado, e armazene o resultado
e mC . (E sta é a fórmula de Pitágoras,
VA + B ? = O.paracalcularocompri-
3

mento C da hipotenusa de um triângulo


retãngulo. cujos catetos são A
e B.) A li-
nha 30 imprime o valor resultante em C.
Em virtude da linha 40, o programa
se auto-repetirá, pois cada vez que ele a
alcança a declaração GOTO
manda-o de
volta à linha 10, e o programa é executa-
do outra vez.
A
única maneira de sair desse ciclo é in-
terromper externamente o programa, atra-
<BREAK> ou <CTRL>
vés da tecla
<C>, <CTRL> <STOP>.etc, de-
pendendo do computador, ou então
desligá-lo e começar de novo (pois o pro-
grama na memória se perde).

SALTOS PARA A FRENTE

A declaração GOTO pode s

utilizada para saltar para a frcn


As declarações GOTO permitem te, por sobre um
bloco do pro-
também que você salte para trás em um grama. É o que acontece no pro
programa, criando um laço. Esse tipo grama a seguir, que simula #^
de laço é semelhante àquele que apren- um jogo de cara ou coroa:
demos a montar com as declarações
FOR...NEXT, embora não haja,
caso, um limite para o número de
neste
vezes
que o programa o executa. O programa
QD
5 FOR F=l TO 500:NEXT
abaixo calcula o valor da hipotenusa de F :CLS
um triângulo retãngulo (note de que ma- 10 PRINT " ESTOU JOGANDO
neira os valoresem A e B são elevados A MOEDA
ao quadrado: multiplicando-os por si 20 FOR J-l TO 3
30 FOR F=l TO 250:NEXT
mesmo, o que é mais rápido do que usar 40 PRINT" " .

a operação de exponenciação).
50 NEXT J
60 PRINT
70 IF RNDC0X.5 THEN GOTO 100
80 PRINT"E DEU COROA!"
10 PRINT "COMPRIMENTO DOS LADOS 90 GOTO 5
A.B EM CM" 100 PRINT" E DEU CARA!"
15 INPUT A,B 110 GOTO 5
; " . " A

IHIIIIIIIIII
30 PAUSE 25 nifica que a declaração GOTO pode pro- mentos, com um mínimo de 2, e um má-
40 PRINT " .
" porcionar um tipo de desvio mais com- ximo determinado pelo número máximo
50 NEXT j plexo ao seu programa; veja a seguir. de caracteres por linha de programa que
60 PRINT o seu computador aceita (normalmente
70 IF RND<.5 THEN GOTO 100
coroa! !" 254 ou 255 caracteres).
80 PRINT "E " !

90 GOTO S Novamente, esta declaração permite


100 PRINT "E ' cara! !
!" programa abaixo usando so-
Digite o a programação de desvios complexos. O
110 GOTO 5 mente maiúsculas, se o seu computador programa anterior passa a ser assim.

5 FOR F-l TO 500 NEXT :


for compatível com o ZX-81

100 PRINT "Ola. qual


orne?"
e o seu n DD
100 PRINT"OLA. QUAL E 0 SEU NOM
6 CLS 110 INPUT aS
E?"
10 PRINT "ESTOU JOGANDO A 120 GOTO (130 + INT (RNDM)*10) 110 INPUT AS
MOEDA. .
130 PRINT "E um bonito nome,
'
.
n 120 ON RND (4 ) GOTO 130.140.150.
20 FOR J-l TO 3 ;aS: GOTO 170
160
30 FOR F-l TO 250 NEXT F 140 PRINT "E um nome gozado,
'
:
" ;aS: GOTO 170 130 PRINT"E UM BONITO NOME. ";A
40 PRINT " " . ; S:GOTO 170
50 NEXT J 150 PRINT "Prazer em conhece-1
140 PRINT"E UM NOME GOZADO. " ;

60 PRINT o " ;aS GOTO 170


:
,

160 PRINT "Ola. ":aS;", eu aou


S:G0T0 170
70 IF RNDtlK.5 THEN GOTO 100 150 PRINT" PRAZER EM CONHECE-LO,
80 PRINT "E DEU COROA l" aeu computador .

170 STOP
";AS:G0TO 170
90 GOTO 5 160 PRINT "OLA, " AS " EU SOU :
;
.

100 PRINT "E DEU CARA 1" 0 SEU COMPUTADOR ,

110 GOTO 5 A declaração GOTO na linha 120 dá


170 END
um salto aleatório para a frente, em di-
reção a qualquer uma das quatro linhas
A função RND na linha 70 sorteia um com as alternativas do programa, em
número aleatório entre 0 e 1. Aqui, a de-
função do resultado da expressão numé-
claração GOTO faz parle da declaração 100 PRINT "OLA, QUAL E O SEU
O número 130 na expressão pode
'

rica. NOME ?"


IF. Se o número selecionado pelo com-
sersomado a 0, 10, 20 ou 30, dependen- 110 INPUT AS
putador for menor do que 5, o com- do do resultado da expressão com RND. 120 ON INT(RND(1)»4)+1 GOTO
putador saltará para a frente, para a li- Assim, o programa poderá saltar para 130, 140, 150, 160
nha 100. Se ele não satisfizer essa con- as linhas 130, 140, 150 ou 160. 130 PRINT " E UM BONITO NOME. "
'

dição, o computador executará normal- O GOTO :AS:GOTO 170


mente a linha seguinte do programa — faz
170, após cada alternativa,
com que o programa salte para a 140 PRINT "E NOME GOZADO, "
'

a linha 80 —
e quaisquer outros coman-
.
frente,ignorando as linhas intermediá-
;AS: GOTO 170
dos porventura existentes na linha 70 se- 150 PRINT "PRAZER EM CONHECE-
rias.Note que não necessitamos de um LO, " ;A$:GOTO 170
rão desprezados. GOTO 170 após a linha 60, pois o pro-
Essa condição significa que a linha 70
1
160 PRINT "OLA, " AS " EU SOU :
:
,

grama vai para a linha 170 de qualquer O SEU COMPUTADOR"


constrói uma bifurcação no programa. maneira (é a última alternativa de GO- 170 END
Existem, neste caso, duas alternativas: ou TO na linha 120).
o computador executa as linhas 70, 80 Assim, este programa roda apenas
e 90, para exibir na tela a mensagem "E EVITE MÁS TÉCNICAS DE PROGRAMAÇÃO
uma vez, pois todos os GOTO instruem
DEU CARA?", ou, então, executa as li- o computador para saltar para a instru-
nhas 70. 100 e 1 10. para exibir "E DEU ção STOP na linha 70, sem formar la-
1
O excessivo emprego de GOTO em um
COROA!". Isso é feito repetidas vezes, programa é considerado um mau estilo de
ços de retorno.
de forma totalmente aleatória, como programação. Uma razão para isso é que,
uma espécie de lançamento rápido de mesmo cm programas simples, uma decla-
uma "moeda eletrònica". A INSTRUÇÃO 0N...G0T0 ração GOTO que o manda de volta para
As linhas 90 e 100 de- também contêm uma linha precedente pode criar um laço
clarações GOTO. Qualquer que seja o Os computadores da linha RS, MSX I sem fim. Ora, esse laço só poderá ser
desvio tomado pelo programa, elas o e Apple têm um equivalente ao GOTO interrompido por meio do teclado,
mandarão de volta ao inicio, na linha 5, variável existenie apenas nos computa- pressionando - se para isso. as teclas
.

para começar outro sorteio. dores da linha Sinclair. É a declaração <BREAK>, <STOP>, <CTRL>
Mais uma vez, você notará que este pro- ON...GOTO. Esta última é bastante po- <C> etc.
,

ou desligando-se o com-
grama não termina nunca. A única manei- derosa e útil em programação, e tem a putador. Isso é inconveniente, prin-
ra de pará-lo é pressionar a tecla de inter- seguinte forma (um exemplo): cipalmente para o usuário do programa.
rupção do seu computador, ou desligá-lo. Mas a principal razão é que, permitin-
ON A GOTO 100,200,300,400 do que você salte, para trás ou para a fren-
Neste exemplo, quando a variável A te, para qualquer ponto do programa, ao
DESVIOS MAIS COMPLEXOS for igual a 1, o programa saltará para inteiro sabor de sua vontade, o uso do
o primeiro número de linha na lista que GOTO tende a quebrar a estrutura lógi-
Nos computadores da linha Sinclair, se segue à palavra GOTO, ou seja, a li- ca do programa. Isso pode não parecer
a declaração GOTO não precisa ser se- nha de número 100. Se for igual a 2,A muito importante, se você estiver lidan-
guida de uma constante numérica. Uma o programa irá para a linha 200, e as- do com programas de 5 ou lOltnhas.mas
variável servirá: GOTO A, por exemplo, sim por diante. A
lista de linhas após pode ser vital, se você estiver escrevendo
|ouGOTO(100 + INT(RND*6)). Isso sig- GOTO pode ter qualquer número de ele- programas de 100 ou 1000 linhas.
IIIIIIHHI Milin

Um bom estilo de programação re- de escrever esta rotina ioda vez que ela go de dados muito simples, uma espécie
quer que os programas sejam desenvol- ocorre no programa, podemos colocá-la de "crepe". No jogo, um par de dados
vidos em módulos lógicos, cada um de- em um ponto qualquer, e simplesmente é arremessado, e o total dos pontos ob-
sempenhando uma tarefa bem separada. direcionar o computador para ela, quando tidos é anotado. Se os totais de dois ar-
ajuda muito quando você tem que necessário, e quantas vezes desejarmos. remessos sucessivos forem iguais, o jo-

O
Isso
localizar erros dc programação que ocor- A diferença decisiva entre um GOTO go terminará. Caso contrário, os dados
rem aleatoriamente, no momento em e um GOSUB é que no finai de uma sub- serão arremessados novamenle.
que o programa é rodado. Esse estilo de rotina deve constar a palavra RF.TURN
programação (conhecido como estrutu- ("retornar", em inglês). Para entrar es-
rado) o ajudará também a fazer progra- ta palavra, nos computadores da linha
mas mais simples, que poderão ser facil- Sinclair deve-se simplesmente pressionar 20 LET A=l
mente modificados no futuro. a tecla marcada com RETURN. Nos ou- 30 BEM PRIMEIRO
. . LANÇAMENTO.
tros micros, digita-se a palavra por ex- 40 GOSUB 150
<ENTER> ou 50 LET Tl-T
tenso, pressionando-se
60 REM. SEGUNDO LANÇAMENTO
COMO UTILIZAR 0 GOSUB
<RETURN> depois (não confundaa
70
.

GOSUB 150
.

tecla de retorno de carro, ou transmis- 80 LET T2-T


são, que é sempre indicada no texto de 90 IF T1-T2 THEN GOTO 120
Existe outra ferramenta de programa- forma diferente, com a instrução RE- 100 LET A-A+l
ção que pode ser utilizada para substi- TURN). 110 GOTO 40
tuir em grande parte o GOTO, quando A declaração RETURN envia o flu- 120 PRINT" CONTAGENS IGUAIS A
este é problemático: é o GOSUB. Essa xo do programa de volta à linha ou ao Tl;" APOS ";A;" LANÇAMENTOS"
instrução é digitada com uma palavra e comando que se segue ao GOSUB que 130 END
140 REM. SUBROTINA
deve ser seguida por um número de li- solicitou ("chamou", na gíria dos pro-
.

150 LET D1=RND[6)


nha {ou ainda por uma expressão numé- gramadores) a sub-rotina. Assim, o com- 160 LET D2-RNDI6)
rica, em micros da linha Sinclair). putador sempre "se lembra" de que pon- 170 LET T-D1+D2
O GOSUB envia o computador para to do programa foi efetuado o desvio pa- 160 RETURN
uma sub-rotina, que se inicia na linha es- ra a sub-rotina e sempre volta a ele, pa-
peci ficada por ele. Uma sub-rotina é um ra continuar o fluxo normal do progra-
conjunto de operações dentro de um pro- ma, depois que a sub-rotina é completa-
grama que podem ser colocadas à parte, da. Desse modo, podemos colocar cha- Digite o programa abaixo usando so-
em uma espécie de "tijolo" lógico. Ela é madas à mesma sub-rotina em qualquer mente maiúsculas, se o seu computador
frequentemente utilizada quando uma ponto do programa. for compatível com o ZX-81.
operação deve ser repetida várias vezes ao No programa seguinte exemplifica-
longo de um programa. Assim, ao invés mos o uso do GOSUB. Ele simula um jo-
INIIIIIIIIIII
30 BEM primeira jogada
40 GOSUB 150
50 LET tl-T programa abaixo usando so-
130 GOTO 200 Digite o
60 REM segunda jogada
mente maiúsculas, se o seu computador
70 GOSUB 150
80 LET t2-T
Em outros micros, isto daria uma for compatível com o ZX-81:
90 IF tl-t2 THEN GOTO 120
mensagem de erro. O mesmo, entretan-
to, não acontece com a linha Sinclair: ao 150 GOSUB 190
100 LET a-a+1 155 LET dl-d
110 GOTO 40 perceber que a linha 200 não existe, o
160 GOSUB 190
120 PRINT "Oa dadoa deram ": computador interromperá providencial-
165 LET d2-d
:
" na jogada" ; mente o programa, pronto para come- 170 LET t-dl+d2
130 GOTO 200 çar de novo. 180 RETURN
140 REM aobroutine Para tais micros, é melhor usar esses 190 LET d-INT (RND*6) +1
150 LET dl-INT (RND"6)+1 expedientes do que colocar 195 RETURN
160 LET d2-INT [RND*6)+1
170 LET T-dl+d2
180 RETURN
que é aceito pelo computador, mas que
gera uma mensagem de advertência na 150 GOSUB 190
155 LET Dl-D
tela.*Issopoderia levar o usuário a acre-
160 GOSUB 190
10 CLS: LET Dl -RND -TIME) ( ditarque houve um erro de execução do 165 LET D2-D
20 LET A=l programa, especialmente porque a linha 170 LET T-D1+D2
40 GOSUB 150 130 não é a úllima linha física do pro- 180 RETURN
50 LET Tl-T grama, pois está no meio dele, antes da 190 LET D-INT(RND(1)*6)+1
70 GOSUB 150 sub-rotina. 195 RETURN
80 LET T2-T Mas seja o mais cuidadoso possível
90 IF T1-T2 THEN GOTO 120 quando utilizar, nesses computadores, o Aqui, as linhas 150 e 160 enviam o
100 LET A-A+1 computador para a sub-rotina na linha
110 GOTO 40 comando GOTO seguido por um núme-
" ro de linha inexistente. 190, que faz o dado rolar (isto é, sorteia
120 PRINT "CONTAGENS IGUAIS A um número aleatório inieiro, entre 1 e6),
Tl; - APOS ";A;" LANÇAMENTOS" Após GOTO 200, por exemplo, os mi-
130 END cros da linha Sinclair pesquisarão todas enquanto as linhas 155 e 165 armazenam
140 REM SUBROTINA
. . . as linhas seguintes. E se encontrarem os resultados de cada lançamento sepa-
150 LET D1-INT(RNDC1)*6)+1 instrução em alguma delas, eles a rado.
uma
160 LET D2-INT(RND(1)*6)+1 executarão (ou tentarão executá-la), in- Por uma questão de concisão, o com-
170 LET T-D1+D2 dependentemente do conteúdo dessa ins- putador realiza apenas o lançamento de
175 PRINT D1;D2;T um dado, e não de dois, separadamen-
trução. Portanto, para ficar mais segu-
130 RETURN te. Veja a seguir:
ro, o melhor é enviar o computador pa-
O arremesso do dado deve ser reali-
zado duas vezes; por isso, é entregue a
uma sub-rotina, que vai das linhas 150
a 80. O GOSUB nas linhas 40 e 70 en-
1
ra a última linha física possível, que po-
de ser a de número 9999, nos micros da
linha Sinclair.
E, para que não haja nenhuma con-
QQ
150 LET T = RND (6) +RND 16)

via o computador ao ponto de inicio da fusão quanto ao que você está fazendo,
sub-rotina (linha 150). O RETURN na coloque:
linha 180 manda o micro voltar à linha
50, caso o chamado à sub-rotina tenha 9999 REM END
partido do GOSUB da linha 40, ou à li-
nha 80, se tiver partido da linha 70. A
linha 140 é usada para identificar o iní-
cio da sub-rotina, usando a declaração É possível uma sub-rotina chamar ou-
REM, que significa apenas um comen- tras, e estas, por sua vez, outras tantas,
tário feito pelo programador. gerando assim uma estrutura em diver-
Note a declaração END na linha 30 1 sos níveis. Assim como no jogo cílado o
UTILIZE 0 COMANDO ON... GOSUB
de todos os programas (exceto os do Sin- dado deve ser lançado duas vezes, a sub-
clair, que usam um GOTO). Se ela não rotina de arremesso pode ser constituí-
Assim como GOTO, a declaração
estivesse aí, o computador passaria a exe- da como uma sub-rotina dentro de ou-
cutar a sub-rotina diretamente e, ao aiin- tra, desde que se mude as últimas linhas
GOSUB pode ser utilizada para chama-
das complexas a um determinado núme-
gir a declaração RETURN,
assinalaria do programa, da seguinte forma:
ro de sub-rotinas, começando em linhas
um erro, pois não haveria indicação pré- diferentes. Nos microcomputadores da
via sobre para que linha retornar.
linha Sinclair (compatíveis com Spec-
irum e ZX-81). o GOSUB pode ser se-
NÚMEROS DE LINHA INEXISTENTES 150 GOSUB 190 guido de uma expressão numérica, ou
155 LET Dl-D nome de variável, exatamente como vi-
160 GOSUB 190
165 LET D2-D
mos anteriormente para o GOTO.
170 LET T-D1+D2 No caso dos computadores de outras
Como os micros da linha Sinclair não 180 RETURN linhas, como TRS-80, Apple e MSX,
| têm declaração END, utilizamos um 190 LET D~RND[6) existe a declaração ON... GOSUB, que
| GOTO seguido de um número de linha 195 RETURN pode ser utilizada para o mesmo efeito.
.

J APUCAÇÕES 3

COMO PESQUISAR E

ORGANIZE MODIFICAR UM REGISTRO


IMPRIMA 0 ARQUIVO
UTILIZE 0 PROGRAMA PARA

COLE SEUS ARQUIVOS

Encontrar o nome e o endereço de uma


pessoa da qual se sabe apenas o
sobrenome e a cidade em que reside é
tarefa simples para o computador.

Mas, para isso, é preciso programá-lo

com as informações adequadas.

Uma das grandes vantagens do arqui-


vamento no computador, em compara-
çãocom métodos mais tradicionais (co-
mo um fichário, por exemplo), é a faci
lidade e rapidez com que se pode encon
trar as informações arquivadas.
O programa da lição anterior da sé-
rie Aplicações fornecia os meios para se
implementar um sistema altamente fle-
xível de arquivamento no computadoi
Neste artigo mostramos como se pode
pesquisar arquivos, lendo em vista ob-
jetivos como a correção de registros de-
satualizados ou incorretos, ou a ai
ção de registros desnecessários.

COMO PESQUISAR UM ARQUIVO

A opção de pesquisa é a de número


4 no menu principal. Ela permite que
você pesquise os registros a partir da in-
formação contida em um campo.
Se você pressionar a lecla 4, o com-
putador mostrará, no alto da tela, os no-
mes dos campos que você definiu ante-
riormente para o arquivo; em seguida,
ele perguntará qual campo você quer
pesquisar —I para o primeiro, 2 para
o segundo, 3 para o terceiro e assim
por diante, contando a partir do alto
da tela. A pergunta seguinte será sobre
o que você quer pesquisar nesse cam-
po. Em resposta, você deve digitar a
palavra ou o número que quer procu-
rar: JOÃO ou CAÇAROLA, por exem-
plo, ou BÍBLIA, ou seja lá o que for.
Em seguida pressione < RETURN> ou
<ENTER>
A palavra ou o número que você di-
gitar deve ser exatamente igual ao que
está escrito no campo. Se uma palavra
foi armazenada com letras maiúsculas
nos registros e você estiver procurando-a
com letras minúsculas, o computador
não irá encontrá-la. Se você tiver deixa-
IIIIIIIIIIIHHH^HHHMHmillllllllll
do, por engano, um espaço ames da en-
trada em um registro, ou apertar o es-
pacejador após a entrada, provavelmen-
te o computador não irá encontrá-la. Is-
so ocorre mesmo que a palavra do re-
gistro e a que você está procurando se-
jam iguais,
Assim, evite espaços desnecessários e
procure entrar informações em letras
maiúsculas. A pesquisa se tornará mais
fácil e menos sujeita a erros.
Caso o computador não consiga
achar nenhum registro com a palavra
que você pediu, no campo pesquisado,
de volta o menu
ele lhe dirá isso e trará
principal. Se, ao contrário, forem en-
contradas diversas respostas, ele coloca-
rá na tela o primeiro registro que tiver
a informação pedida e, a partir dai, lis-
tará em ordem alfabética todos aqueles
com informação igual.
Você deve então selecionar uma das
opções coiocadas nas duas linhas abai-
xo da tela.A primeira é assim:
PROSSEGUE RETOHNA MENU
Isso funciona mais ou menos da mes-
ma maneira que no programa do artigo
anterior. A tecla P serve para pesquisar
os registros selecionados em ordem cres-
cente, ao passo que a tecla M
o leva di-
retamente de volta ao menu principal.
Mas não acontecerá nada se você pres-
sionar a tecla P quando estiver no últi-
mo registro selecionado. A tecla R, na
primeira modalidade de pesquisa, for-
nece uma mensagem: "REGISTRO
NÃO ENCONTRADO".
Talvez a aplicação mais útil da opção
de pesquisa seja descobrir um determi-
nado registro. Para localizá-lo, basta
lembrar-se de qualquer informação so-
bre ele. Por exemplo, suponhamos que
você esteja utilizando esse arquivo para
armazenar nomes, endereços e números
de telefones dos membros de seu clube
e já possua os seguintes campos: nome,
sobrenome, rua, cidade, Estado,código
postal, número do telefone. Neste caso,
você poderá pesquisar um determinado
registro atémesmo se lembrar apenas do
sobrenome da pessoa.
E se uma parte da informação de que
você se lembrou não for exclusiva desse
registro? A solução é simples: por exem- que você deseja modificar. Digite o nú-
plo, se você procura o registro de uma
COMO MODIFICAR UM REGISTRO mero, contando a partir do alto.
pessoa, sabendo apenas que ela mora na Em seguida, o computador pedirá pa-
cidade de São Paulo, ou que o seu pri- A segunda linha de opções da parte ra "ENTRAR A
MODIFICAÇÃO". Vo-
meiro nome é João, poderá evocar to- inferior da tela permite outras opções de cê deve então digitar o novo campo que
dos os paulistanos ou todos os indiví- trabalho com o registro exibido: quer entrar, até mesmo se quiser modi-
duos de nome João e saltá-los até encon- ficar apenas uma letra. Quando as teclas
CORRIGE APAGA IMPRIME
trar o nome correto. Mesmo que o nú- < ENTER> ou < RETURN > forem
mero de nomes fosse muito grande, es- Se você quiser modificar um registro pressionadas, o computador efetuará a
sa procura seria mais fácil do que se ti- mostrado na tela, deve pressionar a te- modificação no lugar correto do regis-
m vesse que percorrer todo o arquivo, re- cla C. O computador perguntará tro. Se você quiser, poderá pressionar

li visando um registro de cada vez. "QUAL O NÚMERO DO CAMPO" mais uma vez a tecla C e modificar ou-
tro campo no mesmo
quiser modificar
tá na tela,
um
deve pressionar
registro.
registro
C
!'
Se você
que não es-
para retor-
< RESET >
ou <CTRL>
(no TRS-Color e Apple),
<STOP> (no MSX), e
verificar o programa. Para continuar a
*

ra 8000,
II
suficiente na memória.
1

sob pena de não haver espaço

nar ao menu principal e escolher a opção utilizar o programa sem perder os dados 3000.GOSUB 8500
armazenados, de modo 3010 PRINT 8417. "MODIFICAR QUAL
de pesquisa 3, para localizar o registro digite direto:
CAMPO? (1 A" A; ") ?" í ;

que deseja alterar. Outra saída seria es- GOTO 30 3020 INS=INKEYS:IF INS-"" THEN
colher a opção 2, "VER OS REGIS- 3020
TROS", achando-o e modificando-o. Retornando ao menu principal (uma
3030 J=VAL(INS)
observação importantíssima: não lente
3040 IF J<1 Ofi J>A THEN 3020
modificar qualquer Unha do programa an- 3050 PRINT 6448 "" .

APAGUE OS REGISTROS INCORRETOS tes de dar o comando acima, caso con- 3060 PRINT 845+32*J."":PRINT §4
trário perderá todos os dados já armaze- 17, "DIGITE O CAMPO MODIFICADO "
Você deve primeiro localizar o regis- nados na memória RAMda máquina). :LINE INPUT ASÍD.J)
tro que deseja apagar, estudando as al- 3070 AS (D J) -LEFTS (ASÍD.J) ,A(J)
,

Normalmente, são apresenta-


ternativas.
das, no lado inferior da tela, seis opções
SAIBA UTILIZAR SEUS ARQUIVOS
)

3080 1F D-R THEN J l:GOTO 3130 —


3090 IF D-l THEN J-1:GOTO 3120
padrão. Para apagai um registro é neces-
3100 IF AS(D.1)>AS<D+1,1) THEN
sário pressionar a tecla A. Então o com- Agora você possui um sistema de ar-
J-l
putador perguntará: "VOCÊ TEM quivamento altamente comple-
flexível e
3110 IF A$(D.1)<AS(D-1.1)THEN J
CERTEZA?". Isso evita que você apa- to, que pode ser utilizado para armaze- — 1
gue, por engano, um registro correio. nar detalhadamente qualquer tipo de in- 3120 IF AS(D+1,1)-"" AND J-l TH
Se você tem certeza de que quer apa- formação. Evidentemente, Você pode EN 3180
gá-lo, pressione a tecla S. computa- O utilizar o programa para armazenar, em 3130 IF J-l THEN 3160
dor apagará eniào esse registro e exibi- uma única fita cassete, um fichário 3140 IF AS(D,1)>-A$(D-1,1) THEN
rá o próximo —
tanto o registro anota- enorme ou vários fichários. 3180
3150 FOR N=l TO A XS-AS {D N) AS : . :

do segundo uma ordem alfabética, se Fitas muito longas, contudo, apre-


(D.N) =AS (D-l ,N) :AS (D-l.N) =XS NE
sentam inconvenientes. Uma solução
:

você estiver na modalidade de exibição, XT D-D-l :GOTO 30 BO


:

quanto o que possui o mesmo campo mais prática consiste em armazenar di- 3160 IF ASÍD.1K»AS(D+1,1) THEN
que você está pesquisando, se estiver na ferentes arquivos em várias fitas, de mo- 3180
modalidade de pesquisa. do a torná-los mais facilmente localizá- 3170 FOR N=l TO A XS = AS (D N) AS : . :

Se você apagou o último registro en- veis.Neste caso, é necessário guardar o (D,N)=AS(D+1,N) :AS(D+1.N)-XS:NE
contrado na pesquisa, o computador in- próprio programa em uma fita separa- XT:D-D+1 :G0T0 3080
formará que não existem mais registros da (somente os micros da linha Spec- 3180 FOR F-l TO 300 NEXT RETURN : :

trum estão dispensados dessa precau- 4000 G=D


com tal item no campo que o interessa 4010 GOSUB 8500
e irará o menu principal de volta. ção). Você poderá, assim, carregar os
4020 PRINT §449, "VOCÊ TEM CERTE
dados antes de selecionar a opção 6. ZA QUE QUER APAGAR?"
À primeira vista, isso pode parecer 4030 INS=INKEVS IF INS-"" THEN :
IMPRIMA OS REGISTROS
um grande desperdício de número de 4030
acessos. Essa impressão, contudo, dei- 4040 IF IN$<>"S" THEN RETURN
A
última opção na parte inferior da xa de ter sentido quando pensamos no 4050 IF G-NR THEN G-C-l
tela permite mandar para a impressora espaço ocupado pelos arquivos dos an- 4060 CLS 7:PRINT §2 36 "APAGANDO .

tigos cartões de indexação.


" :SOUND 30
(caso haja uma) os registros do arqui-
; .

4070 IF D-NR THEN 4090


vo. Se você pressionar a tecla I na ver- 4080 FOR N=l TO A AS (D N) -AS (D+ : ,

são do programa para o TRS-Color, o 1 ,N) :NEXT:D-D+1 GOTO 4070


COMO ENTRAR 0 PROGRAMA :

computador lhe pedirá para "CHECAR 4090 FOR N-l TO A AS [D N)


-"
" NE : , :

A IMPRESSORA" Nesse ponto, é ne-


. XT:NR-NR-1 D-G :

cessário averiguar se a impressora está A seguir, listamos a segunda seção do 4100 FOR F-l TO 400 NEXT RETURN : :

conectada e ligada; se essa condição for programa de arquivamento de dados 5000 FOR N-l TO A PRINT §33+32" :

satisfeita e mesmo assim a impressora que, para sua felicidade, é muito mais N,N,NS(N) NEXT :

curta do que a primeira. 5010 PRINT 0417, "QUE CAMPO PROC


não funcionar, você deverá verificar o
Quando acrescentá-la ao programa URAR (1 A";A:") ?";
programa.
5020 INS-INKEYS IF INS-"" THEN
existente, você notará que poucos núme-
:

No Spectrum essa linha de mensagem 5020


não é necessária, pois ele não reagirá à ros de linhas estão duplicados. Não es-
5030 IF VALdNSXl OR VAL(INS)>
tecla 1 se não houver nenhuma impres- quente a cabeça com isso. Os números A THEN 5020
sora conectada. da primeira seção estavam ali simples- 5040 SOUND 30 1 Z-VAL (INS) PRIN . : :

Uma vez que você já checou se a im- mente para manter o programa intacto T §417 "PROCURAR PELO QUE (NO C
,

pressora está conectada e ligada, acione e permitir o seu teste. Os novos núme- AMPO" Zi ") ?"
;

a tecla C para continuar. Pressionando ros substituirão os antigos assim que vo- 5050 LINE INPUT Z$
algumas outras letras, a linha "CHE- cê digitá-los. 5060 D-1:G=0:CH-1
5070 IF D>NR AND G=l THEN G-0:C
QUE A IMPRESSORA" desaparecerá e H--1 ELSE IF D>NR THEN 5230
você poderá novamente utilizar uma das 50B0 IF D<1 AND G= 1 THEN G-0:CH
seis opções padrão, localizadas no lado -1 ELSE IF Díl THEN 5230
inferior da tela. Caso C seja pressiona- Atenção se você for utilizar o pro- 5090 IF AS(D,Z)OZS THEN D=D+CH
da sem que haja uma impressora conec- grama abaixo em micros com disque- :GOTO 5070
tada, ou esta não funcione por qualquer te. Mude o número 1000 do comando
1 5100 LD=D:G-1 :GOSUB 8500
5110 PRINT 8451 "PROSSEGUE
,

razão, você deve pressionar as teclas CLEAR, no começo do programa, pa-


; : V ) !

3 APLICAÇÕES 3

ETORNA mENU CORRIGE aPA AT U,U;"Digite o campo modificõ


GA IMPRIME" do". LINE AS(D,B(J)+V TO B(J+V)
5120 INS-INKEYS IF INS-"" THEN : ): PRINT AT V+2* J 12 ;ASÍD,B(J)+ .

5120 V TO B(J+V)
5130 IN-INSTR(1,RSS,IN$) 8020 IF D-R THEN LET J— V: GOT
5140 ON IN GOTO 5160.5160,5170, O 8070
5180,5190,5200,5210 8030 IF D-V THEN LET J-V: GOTO
5150 GOTO 5120 8060
5160 CH-1 D-D+l :GOTO 5070
:
8040 IF AS (D)>AS (D+V) THEN LET
5170 CH--1 :D-D-1 :GOTO 5070 J-V
5180 RETURN 8050 IF ASIDKAS(D-V) THEN LET
5190 GOSUB 3000-GOTO 5090 J—
5200 GOSUB 4000:GOT0 5090 8060 IF AS (D+V, V)-" " AND J-V T
5210 GOSUB 10000:GOTO 5070 HEN GOTO 8500
5220 GOTO 5110 8070 IF J-V THEN GOTO 8100
5230 CLS ZlPRINT 8200 "NENHUM R ,
8080 IF A$(D)>-AS(D-V) THEN GO
EGISTRO COM " PRINT e271"LEN(Z
; : TO 8500
S)/2," ";ZS;" "; 8090 LET XS-AS(D): LET AS (D) -AS
5240 PRINT §330," NO CAMPO";Z; (D-V): LET AS (D-V) -X$ LET D-D- :

5250 FOR G-l TO 5:SCREEN 0 1 FO , : V: GOTO B020


R F-l TO 500: NEXT :SCREEN 0,0:FO 6100 IF AS (DX-AS (D+V) THEN GO
R F-l TO 500:NEXT F G RETURN , : TO 8500
8110 LET XS-AS(D): LET AS(D)-AS
(D+V): LET AS!D+V)-XS: LET D-D+
V: GOTO 8020
4000 FOR N = V TO A: PRINT INVER 8500 SOUND ,1,10: PRINT AT U,U;
"Registro numero ";D;" ": RET
SE V;AT N*2.9;N; INVERSE U TAB ;

11;": ";NS(N) NEXT N :


URN
4010 PRINT '"PROCURAR EM QUE C 9000 PRINT AT 19, U; "TEM CERTEZA
AMPO {1 A " Ai " ?"
: )
DE QUE QUER APAGAR? " PAUSE U :

4020 IF INKEYS"" " THEN GOTO 40 9010 IF INKEYS=" " THEN GOTO 90
20 10
4030 LET YS-INKEYS IF CODE YS< !
9020 IF INKEY$0"S" THEN PRINT
49 OR CODE YSX8+A THEN GOTO 4 AT 19.U;"
": SOUND .1,10: RETU
030
4040 SOUND .1,10: LET Z-VAL YS RN
PRINT " PROCURAR PELO QUE NO C
' 9030 PRINT AT 19, U:" APAGANDO
AMPO ";Z;"? n DIM ZS<V,A(Z)): I
:

NPUT LINE ZS (V) 9035 LET DD-D


4044 CLS LET K-V
:
9040 IF D-R THEN LET DD-DD- V
4045 IF AS(K.B[Z)+V TO B(Z+V))- GOTO 9060
ZS(V) THEN GOTO 4050 9050 IF AS (D+V V)O" " THEN LE
,

4046 IF K-R OR AS(K.V)-" " THEN T AS (D) -AS (D+V)LET D=D+V GOT: :

CLS: PRINT AT 9.3:"NENHUM RE O 9040


GISTRO COM ";ZS(V),'TAB 1Q;"N0 9060 LET AS(D)-"": FOR F-V TO 1
CAMPO ";Z: PAUSE 150: RETURN 00: NEXT F: PRINT AT 19.U;"
3030 J-VAL(INS)
4047 LET K-K+V: GOTO 4045 3040 IFJ<lORJ>ATHEN3020
4050 LET D-V: LET PM-V: LET MO- 9070 LET D-DD: IF AS(V,V)-" " T
3060 LOCATE0.22:PRINTSPACES(39)
V HEN LET D-U: RETURN
; LOCATE0 ,22: PRINT" Entre com o
:

4060 IF D>R THEN LET D-PM 9072 IF D-U THEN LET D-V
campo modificado: " LINEINPUTA
; :

4070 IF D-U THEN LET D-PM 9075 IF AS(D,V)-" " THEN LET D
S(D, J)
4080 IF AS(D.V)-" " THEN LET D -D-V
3070 A$(D,J)-LEFTS(AS(D.J) ,A(J)
PM 90B0 IF MD-V THEN RETURN
)
4090 IF AS(D.B<Z)+V TO B(Z+U))< 9090 LET K-V
3080 IFD-RTHENJ--l:GOTO3130
>ZS(V) THEN LET D-D+MO GOTO 4 9100 IF AS(K,B(2)+V TO BIZ+V))-
:
3090 IFD-1THENJ-1 :GOTO3120
060 ZS(V) THEN GOTO 9130 3100 IFAS(D,1)>AS(D+1,1)TKENJ-1
4100 GOSUB 9500 9110 IF K-R OR AS(K.V)-" " THEN
LET DF-V: GOTO 4046
3110 IFAS(D,1XAS(D-1,1)THENJ —
4110 LET PM-D 1
4120 IF OP-V THEN LET MO-V LE 9120 LET K-K+V: GOTO 9100
:
3120 IFAS(D+1,1)-""ANDJ-1THEN31
T D-D+MO: GOTO 4060 9130 LET DD-D: LET PA-V
4130 IF OP-2 THEN LET MO V: L — 9140 IF AS(DD.V)-" " OH DD-U TH
EN LET PA-2: LET DD-D: LET MO-
ET D-D+MO: GOTO 4060
4140 IF OP-3 THEN RETURN MO- V
4150 IF OP-4 THEN GOSUB 8000 9150 IF AS(DD,B(Z)+V TO B(Z+V))
3150 FORN-1TOA:SWAPAS(D.N) ,AS(D
4160 IF OP-5 THEN LET DF-U: LE -ZS(V) THEN LET D-DD: RETURN
9160 LET DD-DD+MO: GOTO 9140 -l.N) :NEXT:D-D-l:GOTO3080
T MD-2: GOSUB 9000: IF DF-V OR 3160 IFAS(D.1X-AS(D+1,1)THEN31
ASÍV.V)-" " THEN RETURN 80
4170 GOTO 4100 3170 FORN-1TOA:SWAPAS(D.N) ,AS(D
8000 INPUT AT U.U:"CAMPO A SER +1.N) :NEXT:D-D+l:GOTO3080
CORRIGIDOU A (A) ;")7"iJ: IF 3000 GOSUB8500 3180 FORF- 1TO300 NEXT RETURN
: :

J>A THEN GOTO B000 3010 LOCATE0.22:PRINT"Modificar 4000 G-D


8010 PRINT FLASH V AT V+2*J,12 ; qual campo 7 (1 até ";A:")";: 4010 GOSUB8500
;AS(D,B(J)+V TO B J+U) INPUT ( ) : 3020 IN3-INKEYS;iriNS-""THEN302 4020 LOCATE0,22:PRINT"Voce conf
3 APLICAÇÕES 3

NT "NUMERO DO CAMPO A SER MODIF


IÇADO GET CPS ! :

3020 IF CPS < "O" OR CPS > "8"


THEN 3010
3030 CP - VAL (CPS) IF CP - 0 :

THEN POKE 34,0: RETURN


3040 VTAB 23: HTAB 1: CALL -
958
3050 PRINT "CAMPO CORRIGIDO ->
"i INPUT AS (D, CP)
:

3060 AS(D.CP) - LEFTS (AStD.CP


) .A(CP)
3070 IF CP < > 1 THEN 3000
3080 IF A$(D,1> > AS(D + 1,1)
ANO D < > NR THEN V - 1: GOTO
3200 «
3090 IF AS(D,1) < AS!D - 1,1)
AND D > 0 THEN V - - 1 GOTO 3 :

200
3100 GOTO 3000
3200 FOR N - 1 TO A:XS • AS(D,
N) :AS(D,N) - AS(D + V,N) :AS(D +
U,N) - X$: NEXT :D - D + V: GO
TO 3080
4000 GOSUB 6500: VTAB 23
4010 PRINT "CONFIRMA A DELECAO
7 " GET INS
; :

4020 IF INS < > "S" THEN RET


URN
4030 IF D - NR THEN 4060
4040 FOR X - D TO NR
4050 FOR Y - 1 TO A:AS(X,Y) -

^
ASÍX + l.Y) NEXT NEXT : :

4060 NR - NR - 1:D - NR IF D - :

0 THEN POP RETURN :

4070 RETURN
5000 DD - 1: PRINT FOR X - 1 :

r
TO A: PRINT HTAB 10: PRINT X; :

" :-" ;NS(X) NEXT :

5010 VTAB 21: PRINT "PROCURAR


POR QUAL CAMP07 - GET CPS : :

5020 CO - VAL (CPS) IF CO > A :

5025 PRINT CO
irmã a delecâo? !S/N)"i E IFD<1THEN5230 5030 VTAB 22; HTAB 1: PRINT "P
4030 INS-INKEYS IFINS-" "THEN4Q3
: 5 090 IFAS(D,Z)OZ$THEND-D+CH:GO RO CURAR O QUE EM ";N$(CO);: INP
0 T 35070 UT PRS
4040 IFINSO"S"THENRETURN 5 100 LD-D:G-1 :GOSUB85D0 5035 IF PRS " "" THEN RETURN
4050 IFG"NRTHENG-G-1
-
5 110 LOCATE3,22:PRINT ÍPÍrDS3eg 5040 HTAB 13: PRINT " PROCURAND
4060 CLS:LOCATE12.15:PRINTCHRSI ue [Rletorna [M]enu [C]o O. .

7) ;"Apagando";CHRS(7) r r rlge [A]paga [I]mprime" 5050 FOR XX - DD TO NR: IF LE


4070 IFD-NRTHEN4090 i
FTS (AS(XX.CO). LEN (PRS)) - PR
'
40BO FORN=lTOA:AS(D,N)-AS(D+l.N ~ 120 INS-INKEYS:IFINS-""THEN512 $ THEN FL - 1:D - XX: GOSUB 602
):NEXT: D-D+l :GOTO4070 0 0: GOTO 5200
4090 F0RN-1T0A AS ÍD.N) " :NEXT
: :
5 130 IN-INSTRU.RS.INS) 5060 NEXT
NR-NR-1 :D-G 5 140 ONINGOTO5160, 5160. 5170, 518 5070 IF FL - 0 THEN VTAB 21:
4100 FORF"1TG400 NEXT RETURN : :
C ,5190,5200,5210 HTAB 1: CALL - 9S8: PRINT "NAO
5000 F0RN-1T0A:L0CATE5.2*N+2:PR 5 150 GOTO5120 ENCONTREI " PRS " EM ";NS(CO): ;
;

INTN.NS (N) NEXT ~ 160 CH-l:D-D+l:GOTO5070 FOR X - 1 TO 5000: NEXT GOTO :


:

5010 LOCATE0.22:PRINT-Procurar 5 170 CH —


1 :D-D-1 :GOTO5070 5090
por qual campo? <1 até ";Ai")"; - 180 RETURN 5080 VTAB 21: HTAB li CALL -
5020 INS-INKEYS:IFINS-""THEN502 5 190 GOSUB3000 :GOTO5090 958: HTAB 8: PRINT "FIM DE ARQU
0 5 200 GOSUB4000:GOTO5090 IVO ENCONTRADO": FOR X - 1 TO 5
5030 IFVAL(INSK10RVAL{INS)>ATH 5 210 GOSUB10O00:GOTO5070 no0: NEXT
EN5020 5 220 GOTO5110 5090 FL - 0 PRS - "": RETURN :

5040 PRINTCHRS 7) Z-VAL (INS) L


( ; : :
5 230 CLS LOCATE0 15 PRINT"Não
: , : e 5200 IF XX - NR THEN 5090
OCATE0 22 PRINT"Procurar o que
, :
n contrei " ZS " em ";NS(2)
j
;
5210 VTAB 15: PRINT "CONTINUO
no campo " Z "7" SPACES (8)
;
;
; 5 250 F0RF-1TO500 NEXT RETURN
: : PROCURANDO " PRS PRINT " EM ": ; :

5050 LINEINPUTZS r -t-i NS(CO);"? (S/N) ";: CET INS


5060 D-1:G-0:CH-1
5070 IFD>NRANDG-1THENG-0:CH--1E
L J 5220
5230
IF INS * "N" THEN 5090
IF INS - "S" THEN DD - XX
LSEIFD>NRI 1EN523Q 3 000 POKE 34,22: GOSUB 6500 + 1: GOTO 5050 gj
5080 IFD<1ANDG-1THENG-0:CH-1ELS 2 010 VTAB 23: CALL - 958: PRI 5240 GOTO 5210
IIIIIIIIIIHHB

PROGRAME.
A CORES
O TRS-Color (e seus compatíveis na-
\ cionais,como o CP-400) possui cinco
modalidades para elaboração de gráfi-
cos de alta resolução (PMODE), nume-
rados de 0 a 4. Eles diferem na resolu-
ção, no grau de detalhe e nas cores dos
desenho exibidos. PMODE é uma ins'
trução BASIC, específica para esses mi
eros, e significa picture modes (modali
dades gráficas). Ela estabelece o conjun
to de cores a ser empregado. Na moda-
lidade de quatro cores — PMODE ou
1

3 — o conjunto 0 consiste de verde,


,

amarelo, azul e vermelho, enquanto c


conjunto 1 de cores é formado por bran
co.azul-piscina (ciano), magenia e laran
ja. Para o conjunto 0 de cores, digite
comando SCREEN 1,0; para o conjun
to1, recorra a SCREEN 1,1.
A diferença entre PMODE 1 e PMO-
DE 3 se encontra na resolução da tela
gráfica que eles utilizam. Resolução grá-
fica é o número de pixels {picture ele-
ment ou elemento de figura) que podem
ser traçados na telae.comoonomediz,
é a unidade mínima de construção de fi-
guras. Ele corresponde a um bloco re-
tangular "aceso"na tela.
O
programa abaixo mostra a capaci-
dade de trabalho com gráficos de reso-
lução média do TRS-Color. Do jeito que
está, ele roda apenas em máquinas com
gravador cassete. Para executá-lo em
uma máquina com Disk BASIC, altere
os endereços nos comandos POKE nas
linhas 30 e 50, mudando-os de 1800 e
1 801 para 3584 e 3585, respectivamente.

10 PMODE3.1:PCLS:SCREEN1.0
20 FOR 1=1 TO 9
30 READ A,B:P0KE 1 60 0+ I * 3 2 A PO
. :

KE 1801+I»32.B
40 NEXT
, 1 }

IIIIIIIIIIIHMH^^HHMHHIIIIIIIIIII
Você já sabe como construir blocos COMO CONJUNTOS
UTILIZAR
gráficos em preto e branco. Aprenda DE CORES DIVERSAS
agora a colorir seus desenhos em COMO DEFINIR CORES EM
micros da linha TRS-Color, empregando BLOCOS GRÁFICOS
técnicas mais sofisticadas,
EXPLORE OS PMODE

50 FOR K-10 TO 22:POKE 1800+K*3 decimal e foram convertidos a partir de 30 MO-INT(MO) :IF MO<0 OR M0>4 T
2,192:POKE 18Q1+K-32 0 NEXT . : um número binário de oito bits. Mas, HEN 20
40 INPUT"NUMERO DA TELA(O-l) *;
60 GOTO 60 ao invés de bits individuais, que dizem
70 DATA 192.0.213.149.213.149.2 ST
ao computador para ligar ou desligar pi-
13.149.234,170,234.170,213.149, 50 ST-INT tST) IF ST<0 OR ST>1 T
:

xels individuais, os pares de bits estabe-


213.149.213.149 HEN 40
lecem agora que cor será atribuída aos 60 INPUT "NUMERO (0-255) " NU :

O programa desenha uma bandeira pares de pixels. No PMODE 1. um par 70 NU-INT(NU) :IF NU<0 OR NU>255
e um mastro na tela. Os códigos dos blo- de bits diz ao computador para situar THEN 60
cos gráficos que constituem o desenho dois pares de pixels, um abaixo do ou- 80 IF MO<4 THEN LE-2 ELSE LE-1
são especificados em uma linha DATA; tro na tela. 90 IF MO<2 THEN DE-2 ELSE DE-1
o programa as lê e coloca os caracteres A figura 1 mostra como a bandeira 100 IF IMO AND 1)-1 THEN SP 2 E —
é feita de pares de pixels: ela é definida
LSE SP—l
gráficos correspondentes na memória de
110 FOR K-7 TO 0 STEP SP
vídeo, através do comando ou POKE através de um conjunto de números bi-
120 FOR L»l TO LE
PRINT@. Desta vez, para que você nários de dois bits, correspondentes a 1-30 FOR J-l TO DE
possa ver os blocos gráficos mais clara- cada um dos dois blocos de pixels. No 140 IF SP=-1 THEN PP-1358+32* J+
conjunto de cores 0 você deve escrever (3-K)*LE+L:CO-INT(.5+(NU AND 2"
mente, os códigos são colocados na pá-
gina de memória de vídeo, a partir do 00 para um bloco de cor verde, 01 para :GOTO 160
K) /2"K)
endereço 1800, o que os situa no meio um bloco amarelo, 10 para um azul e 1 150 PP-1393+32*J+L-K:CO-INT(.5+
-

da tela. Isto ocorre porque a página grá- para um vermelho. Quatro desses núme- (NU AND 3*2' (K-l) )/2 (K-l)
fica usada (PMODE 3) tem seu endere- ros de dois bits compõem cada parte dos 160 POKE PP.113-SPM5-t-CO*(14-SP
dados de oito bits. )+ST*64
ço absoluto de início na locação 1536. 170 NEXT J,L
O programa não funcionará em máqui- Caso tenha escolhido o conjunto de 180 POKE PP-32*DE,47+K
nas com BASIC de disco. cores 1 , digitando SCREEN 1,1 na linha
190 POKE PP-32"DE+1+SP.48+K
A linha 10 seleciona o PMODE 3 10, você terá uma bandeira desenhada 200 IF SP--2 THEN POKE PP+31.11
(conjunto de cores 0) e limpa a tela. As em branco, dano, magenta e laranja. 2- {CO>l>
linhas 20 a 40 lêem nove pares de dados Nesse conjunto de cores você escreve 00 210 POKE PP+21.112+(CO AND 1)
que definem o desenho da bandeira, e os quando quer um bloco branco opaco, 220 NEXT K
colocam diretamente na página de vídeo 01 para um azul ciano, 10 para um bloco 230 PRINT «482. "PRESSIONE QUALQ
correspondente, através do comando magenta e 1 1 para um laranja. UER TECLA PARA CONTINUAR";
240 SCREEN 0.1-ST
POKE. O da bandeira é desenha-
restante
250 AS-INKEYS:IF AS"" " THEN 250
do pela linha 50, que traça o mastro atra- 260 GOTO 10
vés de dois POKE (códigos 192 e 0), repe-
tidos 22 vezes. A linha 60 forma um laço O programa lhe pedirá para selecio-
sem fim, cuja única função é "congelar" Oprograma abaixo permite ver o nar uma modalidade de gráfico (PMO-
a tela gráfica. Pressionando < BREA K > efeito que os códigos gráficos em DA- DE) e o número de tela (SCREEN). A
você interrompe o programa. TA têm sobre os pixels e as suas cores seguir, digite um número entre 0 e 255.
A principal diferença entre a técnica em cada um dos PMODE (rodar apenas Aparecerão na tela as cores e os tama-
que tínhamos aprendido antes e a utili- nos micros com BASIC para cassete). nhos relativos dos pixels, com os núme-
zada neste programa está nos dados de 10 CLS ros dos bits em cima e os seus equiva-
definição da figura. Os códigos estão em 20 INPUT-MODO GRAFICOÍ.0-4) ":MO lentes binários embaixo.

CONJUNTO DE CORES
N9DO PIXELS
PMODE SCREEN 1.0 SCREEN 1.1

O " preto e verde preto e branco

i :! verde, amareio. branco, ciano,


azul e vermelho magenta e laranja

2 preto e verde preto e branco

3 verde, amarelo, branco, ciano.


azul e vermelho magenta e laranja

4 preto e verde preto e verde

i
4 CÓDIGO DC MÁQUINA 4

COMO ENCONTRAR UM LUGAR


PARA 0 CÓDIGO OE MÁQUINA
PROGRAMA MONITOR

o SAIBA USAR O MON ITOR


RODE UM PROGRAMA

O micro responde automaticamente a adicional: um míni-Assembler disponível código de máquina pode ser chamada de
comandos em BASIC. Nesta lição você na ROM do equipamento, que permite um programa em BASIC, se um código
a programação com códigos mnemóni- de máquina for gravado nessa área em-
aprenderá a trabalhar com código cos e que pode ser invocado diretamente quanto o programa em BASIC estiver
de máquina, usando um programa em do BASIC, pelo comando MA. sendo rodado, ocorrerão falhas de ope-
ração, perdas de programa, ou até o
BASIC e a instrução POKE.
"congelamento" da máquina.
Você pode utilizar áreas de memória
intermediária, como o buffer da inter-
Essas máquinas não oferecem moni-
Embora o código de máquina seja a face para o gravador cassete ou para a
tores ou montadores embutidos na
impressora, se o programa for curto, e
linguagem de microprocessador, não exis- ROM. Precisam, portanto, de progra-
tem meios de colocá-lo diretaraente na mas externos, que devem ser carregados desde que você não esteja utilizando es-
ses periféricos. Se você olhar o manual
memória de um computador pessoal. E previamente na memória RAM, para o
de programação do seu computador, ve-
preciso entrá-lo através de um outro pro- trabalho direto com a linguagem de má-
grama — o que na maioria dos micros quina (códigos hexadecimais). rá também que alguns modelos têm na
atuais significa utilizar a linguagem BA- O instrumento básico para entrar memória RAM áreas não usadas que
SIC para esse programa, pois ela é a úni- uma rotina de máquina é o comando podem ser empregadas para programas
curtos em código de máquina.
ca disponível na memória ROM
da má- POKE. Ele serve para colocar os códi-
quina. Além disso, não podemos man- gos de máquina, byte por byte, na me-
dar o computador executar um progra- mória do computador, usando endere-
ma em código de máquina utilizando um ços absolutos (isto é, o número real da
comando nesse código: é preciso utilizar locação de memória, em vez de um no- Nos micros compatíveis com o Sinclair
também uma instrução em BASIC. me simbólico de variável, como o As- Spectrum, como o Microdigital TK-90X,
Existem programas especiais para sembler e o BASIC fazem). você pode utilizar a área de gráficos defi-
quem deseja programar diretamente em Nos micros compatíveis com Sinclair níveis pelo usuário (UDG) — entre FF58
linguagem de máquina (ou seja, utilizan- Spectrum, ZX-81, e TRS-80 Modelo I e FFFF, no modelo de 48 K — desde que
do códigos em hexadecimal). Esses pro- (BASIC Nível II, da versão cassete), vo- ela não esteja sendo utilizada pelo seu
gramas são chamados de monitores e cê não pode usar um hexadecimal com programa. Mas, normalmente, programas
permitem, entre outras coisas, entrar um o comando POKE, apenas um número em código de máquina são colocados en-
programa em hexadecimal na memória decimal. Assim, os hexadecimais de sua tre a área de gráficos UDG e o final da
da máquina, executá-lo, listá-lo na tela rotina de código de máquina devem ser área BASIC, através da modificação do
ou na impressora, corrigi-lo, etc. convertidos para decimais, antes de se- endereço do sistema, chamado RAM TOP
rem entrados. Já o TRS-Color, os (e que identifica o maior endereço dispo-
TRS-80 Mod. Ill e IV (com o Disk BA- nível na memória RAM do computador),
SIC), o MSX e o Apple II aceitam he- para um valor menor.
xadecimais no POKE. Desse modo, a área para o BASIC fi-
Os micros da linha TRS-80, conv ca diminuída, mas, como não|pode ul-
tíveis com as máquinas de Radio Shath trapassar o endereço armazenado na lo-
americanas, modelos III e IV,|têm um ONDE COLOCAR 0 PROGRAMA
cação RAMTOP, o código de máquina
monitor disponível na memória. Esse é protegido contra qualquer interferên-
monitor permite o trabalho direto com Antes de entrar um programa em có- cia por parte do BASIC.
códigos hexadecimais e é bastante com- digo de máquina, você deve decidir on- A RAMTOP é uma variável de siste-
pleto. Já os micros compatíveis com o de irá colocá-lo na memória. Obviamen- ma, e sua posição é fornecida pelo apon-
Modelo I do TRS-80 não dispõem des- te, não se deve pô-lo em uma área de tador nas locações de memória 5CB2 e
se recurso, necessitando de um progra- memória utilizada pelo micro, senão o 5CB3. Para movimentar o RAMTOP
ma elaborado em BASIC, especial ou seu programa será destruído quando al- para baixo você precisa apenas colocar,
disponível comercialmente. gum outro na memória ROM entrar em com o comando POKE, um valor mais
açào, ou o computador deixará de fun- baixo nessas duas locações. Mas o Spec-
cionar corretamente, pois terá algum da- trum possui um outro comando BASIC:
do alterado pelo seu programa. o CLEAR, que faz essencialmente a
Os micros das linhas Apple II + He , Você também precisa ser cuidadoso mesma coisa e deve ser seguido pelo en-
e IIc, bem como o Micro digital TK-2000, quando utilizar as áreas de memória dereço decimal do lugar para o qual vo-
em todas as suas versões, têm um pro- RAM normalmente reservadas pelo in- cê quer que o RAMTOP seja rebaixado.
grama monitor embutido, para trabalho terpretador BASIC (essas áreas são des- O comando CLEAR também limpa o
direto com hexadecimais. O modelo critas no manual de operação ou progra- arquivo de exibição (ou seja, a tela), da
| TK-2000 conta ainda com uma vantagem mação de seu micro). Como a rotina de mesma forma que um CLS (e todas as va-
IIIIIIIIIIIHHHHBHHMHHUIIIIIIIIII
riáveisl. Além disso, ele restaura a posi- rá sua extensão (contar os bytes). Então, Ele limita o topo da memória RAM
ção do comando gráfico PLOT para as na primeira linha do programa em BA- (normalmente, em H7FFF ou 32 767 em
coordenadas 0,0 —
que definem o lado SIC, digite um REM seguido de pontos: decimal) em 30 000, deixando 2 767
inferior esquerdo da leia —
restabelece o
,
10 REM bytes livres para os programas de códi-
apontador do comando READ para o iní- go de máquina.
cio da lista de declarações DATA do pro-
O número de pontos deve ser pelo Nesses micros o comando CLEAR
grama, e zera todos os RETURN ativos.
menos igual ao número de bytes em seu tem outra função separada, e não rela-
programa de código de máquina.
Em um TK-90X com 16 K, por exemplo, Em seguida, você deve colocar os có-
cionada: a atribuição de espaço de me-
o comando mais usual é:
digos do seu programa nas locações de
mória para as variáveis alfanuméricas. O
primeiro número do comando CLEAR
CLEAR 31999 memória ocupadas pela declaração
fornece o espaço de cordões que deve ser
Isso modifica o RAMTOP para 31 999 REM, um byte de cada vez. Isto é feito
reservado para o programa em BASIC.
ou 7CFF em hexa, deixando 600 bytes por intermédio da declaração POKE. Se
Quando a máquina é ligada, o compu-
acima dele —isto é, protegendo a área sua REM estiver na primeira linha do
tador guarda 200 bytes logo abaixo do
que vai desde esse ponto até o final da programa em BASIC, a área reservada
endereço máximo de memória (RAM-
área de UDG (que está em 32 600) para para isso começa na locação de memó-
TOP) paras as variáveis alfanuméricas.
a colocação de programas em código ria 16 514.
Assim, quando você deixar o RAMTOP
de máquina. No modelo de 48 K, o co- Outra maneira de criar um espaço
mais baixo, deverá reservar, abaixo de-
mando deve ser, neste exemplo: protegido é dimensionar um conjunto.
le, também uma quantidade similar (200
A linha de programa em BASIC: bytes), para os cordões.
CLEAR 6 3999
10 DIM AÍ100) Teoricamente, você pode baixar o
O RAMTOP desce, de tal modo que
fornecerá 500 locações livres da memó-
RAMTOP do TRS-Color até quase o
d área do BASIC passa a terminar em topo da área reservada para as telas grá-
ria na área de variáveis. Para cada ele-
63 999, ou F999 em hexa: você pode, as- ficas, embora a máquina vá precisar de
sim, iniciar o seu programa de código
mento desse conjunto, o ZX-81 deixa um mínimo de espaço para o BASIC.
cinco locações livres. Se você quiser des-
de máquina em 64 000 ou FADO em he- OPCLEAR 1 deixa apenas uma das
cobrir onde começar a armazenar o có-
xa. Na maioria das aplicações isso dei- páginas de gráficos; assim, você usa o
digo de máquina neste caso, deverá uti-
xará espaço suficiente para os seus pro-
lizar a função PEEK, para obter o va-
CLEAR para limitar a memória em
gramas em código de máquina. §H3680 (em computadores sem disco,
lor armazenado na variável de sistema
Com programas de código de máquina VARS, que está localizada cm 16 400 e
apenas). O PCLEAR 8 atribui as oito
mais longos que o usual, você deve abai- páginas de gráficos, permitindo que se
16 401:
xar o RAMTOP ainda mais. Mas isso po- reserve memória só até §H3680. Se vo-
de não ser bom na prática: com o RAM- PR1NT PEEK 16400+PEEK 16401+6 cê não utiliza o comando CLEAR, o
TOP tão baixo, não existe espaço nem mes- computador atribui quatro páginas de
mo para entrar uma linha de BASIC. Isso fornece o endereço inicial da gráficos; assim, você só poderá usar o
área protegida que você criou (as seis lo- CLEAR até §H1E80.
cações extras de memória contêm deta-
Esses limites dependem muito do que
lhes do conjunto). Você poderá, então, está dentro da máquina no momento. Se
No ZX-81, pode-se abaixar o RAM- usar a instrução POKE para entrar o
existiralgum tipo de programa em BA-
TOP, alterando as locações de memória programa em código de máquina, a par- SIC, provavelmente você obterá uma
16 388 e 16 389 por meio de comandos tir do endereço reservado. É possível
mensagem de erro "OM" (out of me-
POKE, de modo a criar uma área prote- também criar espaço em um cordão com mory). Assim, para todos os propósitos
gida, onde os programas de código de uma linha BASIC, como: práticos, trabalhar próximo ao limite não
máquina não sejam modificados. O pro- 10 LET S3-"
"
será bom, pois você deverá entrar um
blema é que não se pode armazenar em programa BASIC em algum lugar para
fita o programa que estiver nessa área. com tantos pontos quanto bytes no pro-
chamar o seu programa de código de má-
Programas curtos em código de má- grama de código de máquina. Para achar
quina. Se você quiser iniciar seu progra-
quina podem ser colocados com POKE o endereço inicial, você deve examinar o
que tem em VARS e acrescentar 6. As
ma de código de máquina com um nú-
na memória intermediária (buffer) pa- mero redondo como 30 000 então digite:
ra a impressora, que ocupa as locações seis locações extras de memória, neste ca-

de memória de 16 444 a 16 476. Existem so, contém o nome do cordão. CLEAR 200.29999
O problema com esses dois métodos
outras áreas pequenas nas quais você
pode colocar seus programas em códi-
go de máquina, mas não é possível
é que a área das variáveis é apagada
quando se aperta a tecla CLEAR ou se
roda o programa em BASIC de novo.
m Para proteger os programas de código
guardá-los em fita.
Existem

uma área
três
um programa de código
maneiras de se colocar
de
BASIC, protegendo-o contra
outras gravações: póde-se entrá-lo como
máquina em D O modo mais fácil de proteger os
de máquina neste micro utilize o coman-
do CLEAR do BASIC. Este limita a me-
mória RAM máxima, reservando um es-
paço acima para seu programa em códi-
pane de declarações REM; colocá-lo programas de código de máquina nesse go de máquina. O CLEAR também zera
dentro de variáveis alfanuméricas ou computador consiste em utilizar o co- as variáveis numéricas alfanuméricas.
cordões de caracteres; ou pode-se mando CLEAR do BASIC. O CLEAR Normalmente, ele assume esta forma:
armazená-lo em um conjunto numérico. também zera todas as variáveis numéri-
cas alfanuméricas. Usualmente, ele as-
CLEAR 100.1HE000
Para entrar um programa em código
de máquina como parte de uma decla- sume esta forma: Ele limita o topo da memória RAM em
ração REM você deve calcular qual se- CLEAR 200.30000 57 344, deixando 8 192 bytes livres paraos
' ) S ; : 2 (

IIIIIIIIIIIHBMMB^MHUailllllllllll
programas de código de máquina. 420 AS-INKE¥S:IF AS""" THEN 420 420 NEXT M
Nesies micros o comando CLEAR 430 P-0:IF AS-"S" THEN P — 440 LET SA-SA+S
440 PRINT tP.SA; 445 PRINT tST: POKE 23692,0
tem uma outra função separada e não 450 LET AS-INKEYS: IF AS-""
450 FOR M-0 TO 7
relacionada: a atribuição de espaço de THEN GOTO 450
460 PRINT tP,' ";RIGHTS(" "+HEX
memória para as variáveis alfanuméri- 460 IF AS-CHRS 13 THEN RETURN
S(PEEK(SA+M)) .2)
O primeiro número do comando
cas, 470 NEXT PRINTIP
:

CLEAR fornece o espaço de cordões 480 SA=SA+8


que deve ser reservado para o progra- 490 AS-INKEYS:IF AS-"" THEN 490
ma em BASIC. O computador guarda 500 IF AS-CHRSU3) THEN RETURN
";
automaticamente 100 bytes abaixo do 510 GOTO 440 510 INPUT "NUMERO DE BYTES?
endereço máximo de memória (RAM- 600 INPUT "ENDERECO INICIAL ";S H
S20 INPUT "NOME DO ARQUIVO? ".
TOP) para as variáveis alfanuméricas LINE NS
quando a máquina é ligada. Se você dei- 530 IF LEN NS<1 OR LEN NS>10
xar o RAMTOP artificialmente mais THEN GOTO 520
baixo, deverá destinar também uma 540 SAVE NSCODE SA.N
quantidade similar —
100 bytes abai- — 550 RETURN
xo dele, para os strings.

UM PROGRAMA MONITOR
5 POKE 23658,8 Antes de executar este programa, vo-
10 PRINT INVERSE 1 ;AT 5,6;"
O programa seguinte é um monitor MONITOR TK 90 X " cê deve digitar uma linha 1 contendo um
simples para auxilio à programação em 15 PRINT AT 8.1;"1: ENTRAR EM REM seguido do número apropriado de
linguagem de máquina. Ele permite que CÓDIGO DE MAQUINA" caracteres, de modo a receber seu pro-
você digite códigos de máquina na memó- 20 PRINT AT 10.: EXAMINAR grama em código de máquina (um ca-

ria do computador, guarde programas de MEMORIA" ractere por byte de programa).


código de máquina em fita e examine-os 30 PRINT AT 12,: 3: GRAVAR P
YTES EM FITA" 10 PRINT AT 4,9;"MONIT0R TK85"
na memória. Antes de entrar o programa, 15 PRINT AT 8,4; "1 - PROGRAMAR
70 LET AS-INKEYS IF AS<"
é necessário dar o comando CLEAR apro- EM CÓDIGO"
OR AS>"3" THEN GOTO 70
priado. Feito isso, o programa é entrado 80 CLS : GOSUB 100+200* (VAL A 20 PRINT AT 10,4;"2 - EXAMINAR
e rodado; em seguida, o computador pe- 9-U A MEMORIA"
de que você forneça um endereço inicial, 90 HUN 50 LET AS-INKEYS
"
que deverá ser o da memória, acima do es- 100 INPUT "ENDERECO INICIAL? 60 IF AS<"1" OR AS>"2" THEN
tabelecido em CLEAR. Lembre-se de que ;SA GOTO 50
o comando CLEAR especifica o último 110 INPUT LINE DS CLS
70
endereço de BASIC, e o seu programa de 120 IF DS-"" THEN GOTO 110 80 GOSUB 100+200MVAL AS-1)
125 IF DS(D-"#" THEN RETURN 85 CLS
código de máqui na deverá começar na lo-
127 IF LEN DS-1 THEN GOTO 110 90 RUN
cação acima dele. 130 LET SS-DSd TO 2) 100 PRINT AT 21,0; "ENDERECO INI
Agora digite o monitor de código de 140 FOR N=l TO 2 CIAL?"
máquina para o seu computador. 150 IF SS<N)5>"9" THEN LET SS ! 105 INPUT SA
Nl-CHRS (CODE SStN)-?) 110 INPUT DS
155 IF SS(N)>"?" OR SS(N)<"0" 120 IF DS-"" THEN GOTO 110
THEN PRINT FLASH 1; "CARACTER 125 IF DS(1)-"S" THEN RETURN
10 CLS E INVALIDO": GOTO 110 130 LET SS-DS (1 TO 2)
20 PRINT 8193, "1: ENTRAR EM COD 160 NEXT N 135 SCROLL
IGO DE MAQUINA " 170 POKE SA, (CODE SS 1) -48) «16 ( 140 FOR N-l TO 2
30 PRINT ê257,"2: EXAMINAR MEMO +CODE SS (2) -48 150 IF SS(NX"0" OR SSÍN)>"F"
RIA " 160 PRINT SA.DS TO 2)
( THEN PRINT "CARACTER INVALIDO"
40 PRINT «321, "3: GRAVAR BYTES 190 LET DS-DS (3 TO ) 155 IF SS(N)<"0" OR SS(N)>"F"
NA FITA " 200 LET SA-SA+1 THEN GOTO 110
50 AS-INKE¥S:IF AS<"1" OR AS>"3 210 GOTO 120 160 NEXT N
THEN GOTO 50 300 INPUT "ENDERECO INICIAL? " 170 POKE SA, (CODE SS (1) -28) "16+
60 CLS ;SA CODE SS (2) -28
70 ON VAL (AS) GOSUB 200.400,600 310 INPUT "IMPRESSORA (S/N) ? " 175 SCROLL
80 GOTO 10 ; LINE PS 180 PRINT SA.DSI TO 2)
200 INPUT " ENDERECO INICIAL " ;
320 LET ST-2: IF PS-"S" THEN 190 LET DS-DS (3 TO )

A LET ST-3 195 IF LEN DS-1 THEN GOTO 110


210 LINE INPUT DS 330 PRINT IST;SA; 200 LET SA-SA+1
220 IF DS-"" THEN GOTO 210 340 FOR M-0 TO 7 210 GOTO 120
230 IF LEFTS (DS. lí ="i" TTHEN RE 350 LET HS-"M" 300 PRINT AT 21,0;™ ENDERECO INI
TURN 360 LET HSU)-CHRS (INT (PEEK CIAL?"
240 SS-LEFTS (DS. 2) (SA+M) /16)+48) 310 INPUT SA
250 POKE SA.VALC&.H^SS) 370 LET HS(2)-CHRS (48+PEEK (S 320 SCROLL
260 PRINT SA LEFTS (DS 2 , .
A+MJ-16MCODE HS(1)-48)1 330 PRINT SA;
270 DS-MIDS (DS. 3) 380 FOR N-l TO 2 340 FOR M-0 TO 7
"
280 SA-SA+1 GOTO 220
:
390 IF HS(N)>"9" THEN LET HS 350 LET HS-"
400 INPUT "ENDER ECO INICIAL " SA ; N)-CHRS (CODE HS(N)+7) 360 LET HSID-CHRS (INT (PEEK (
*

410 PRINT"SAIDA PARA IMPRESSORA 400 NEXT N SA+M) /16) +28)


(28+PEEK (SA
uns/m 410 PRINT #ST;TAB 7+3*M;HS; 370 LET HS(2)-CHRS
" >

+M)-16*(C0DE HSID-28}) ra a máquina e pressionar < ENTER > da, entre os bytes corretos.
100 PRINT TAB 7+3*M;KS; ou < RETURN > . você deve começar a Outro modo de fazer correçòes,
410 NEXT M digitar os códigos de máquina na forma quando existe apenas um erro, consiste
440 LET SA-SA+8 de valores hexadecimais de dois dígitos em acionar a tecla < BREAK
> (nos mi-
450 LET AS-INKEYS cros da linha Sinclair e TRS-Color), ou
cada. Cada valor deve ser separado do
460 IF AS""" THEN GOTO 450
470 IF AS-CHRS 118 THEN RETURN seguinte por um espaço em branco. as teclas <CONTROL> <STOP>
480 GOTO 320 Anles de pressionar < ENTER > ou (no MSX), para interromper o progra-
< RETURN > você pode entrar tantos ma monitor, e usar o POKE de modo
pares iquantos'desejar. Masé melhordi- direto, para corrigir o conteúdo da lo-
gitar uma linha por vez e checar rigoro- cação apropriada. Lembre-se de que no
samente os dígitos antes de pressionar Spectrum e no ZX-81 você deve usar o
10 CLS
20 LOCATE S,7:PRINT "1 - Progra < ENTER > E muito mais
. fácil editá- POKE com um número decimal. Assim
losenquanto eles ainda estão na tela do que terminar a correção, pressione
30 LOCATE 8.9:PHINT "2 - Examln que quando estiverem na memória. < ENTER > ou < RETURN > e exami-
Você notará que as versões do progra- ne mais uma vez a memória para ter cer-
40 LOCATE 8, 11: PRINT "3 - Grava
ma para o Spectrum e para o ZX-81 tra- teza de que dessa vez você acertou.
r bytes na fita" duzem seus números hexa para decimais,
50 AS-INKEY$:IF AS-"" THEN GOTO antes de colocá-los na memória. Isto de-
50 GUARDE SUAS ROTINAS
60 CLS ve ser feito, como explicamos antes, por-

70 ON VAL(AS) GOSUB 200.400.600 que o POKE é uma declaração do BA-


80 GOTO 10 SIC, e o BASIC nestas duas máquinas Se você quiser conserva
200 INPUT "Endereço inicial";SA não aceita números hexa. Mesmo assim, de código de máquina, deverá guardá-
210 LINE INPUT DS é melhor você pensar apenas em hexa lo em uma fita separado de seus progra-
220 IF DS-"" THEN GOTO 210 uma melhor percepção
pois isso lhe dará mas de código de máquina, da maneira
230 IF LEFTS(DS.l)-'*" THEN RET de como o computador funciona. usual. A opção "Armazenar Bytes em
UBH Você deve finalizar os seus progra- Fila" no menu do programa monitor
240 SS-LEFTS(DS,2) mas de código de máquina com um si- serve apenas para guardar as rotinas de
250 POKE SA. VAL (S.H0+-SS)
260 PRINT 5A.LEFTS<DS.2> nal sustenido # ou, no ZX-81, si- um código de máquina que foram entradas
270 DS-MIDS (DS 3) .
nal de dólar. Isso trará o menu de volta com o monitor. A única exceção é para
280 SA-SA+liOOTO 220 para a tela. o ZX-81 no qual você deve guardar suas
,

400 INPUT "Endereço inicial";SA Se você selecionar a opção 2 para rotinas de código de máquina junto com
410 PRINT "Safda para impressor examinar a memória, o programa pedi- o programa monitor.
a ? (S/N) rá novamente um endereço inicial — Nas outras máquinas, se você pres-
420 AS-INKEYS:IF AS-"" THEN 420 desta vez é o início da área de memória sionar 3, o programa pedirá mais uma
430 IF AS""S" OR A$-"a" THEN OP que precisa ser observada. Para exami- vez um endereço inicial. Este deverá ser
EN "LPT:" FOR OUTPUT AS #1 ELSE
nar todo o seu programa em código de normalmente o endereço inicial da roti-
OPEN "CRTí-FOR OUTPUT AS #1 na de máquina que você acabou de en-
440 PRINT fl.SA; máquina, esse endereço inicial deverá ser
o mesmo que o endereço inicial que vo- trar, embora qualquer parte da memó-
450 FOR M-0 TO 7
";RIGHTS(" "+HEX cê forneceu anteriormente. ria possa ser guardada por meio da uti-
460 PRINT
S (PEEK ÍSA+M) 2) ) . ; A
seguir, exceto no ZX-81, será pergun- lização de um endereço diferente.
470 NEXT PRINT li,
: tado se você quer imprimir uma cópia de- As versões deste programa para o S -
480 SA=SA+1 finitiva do programa em código de máqui- pectrum, o TRS-Color e o MSX pedi-
490 AS- INKEYS I F AS""" THEN 490
:
na na sua impressora. Se você não quiser rão então a você os números de bytes
SOO IF AS-CHRSU3) THEN CLOSE I fazer isso, e pressionar N, o programa im- que a sua rotina em código de máquina
1 HETURN
:
primirá o endereço inicial e os conteúdos ocupa. Você pode calcular isso pela con-
510 GOTO 440
dessa locação e das sete locações de memó- tagem dos pares de dígitos hexas que fo-
600 INPUT "Endereço inicial ";S
A ria subsequentes em uma linha na tela. ram entrados anteriormente. Cada par
" ;N Se, ao contrário, você responder à é um byte. Em seguida, você deve en-
questão acima pressionando qualquer trar um nome para a rotina —
assim, o
tecla do teclado — exceto < ENTER seu computador será capaz de identificá-
630 XS*"CAS:"+NS ou < RETURN > — o endereço origi-
, lo quando você quiser carregá-lo. A ro-
640 BSAVE XS.SA.SA+N.SA nal será impresso, junto com seus con- tina será gravada pressionando-se as te-
650 RETURN teúdos e os conteúdos dos sete bytes sub- clas <PLAY> e <RECORD> no
sequentes. Assim, seguindo esse méto- gravador, antes de acionar a tecla
COMO 0 MONITOR FUNCIONA do, você poderá imprimir todo o seu < ENTER > do computador. Quando
programa de código de máquina. a gravação se completar, aparecerá o
Quando você rodar o programa apro- Se você localizar um erro e quiser menu na tela, novamente.
priado à sua máquina, ele exibirá um corrigi-lo, pressione < ENTER > ou
menu onde aparecem as três opções bá- < RETURN >, e o programa retorna-
COMO CARREGAR CÓDIGO DE MÁQUINA
sicas de trabalho com o monitor: "En- rá ao menu. Pressione 1 para entrar o
trar Código de Máquina", "Examinar código de máquina, e o computador pe-
a Memória" ou —
exceto no ZX-81 — dirá novamente um endereço inicial. Com o Spectrum, o TRS-Color e o
"Armazenar Bytes na Fita". Desta vez, forneça o endereço do byte MSX a rotina de código de máquina é
Se você quiser entrar código de má- que estiver errado. Se o erro atingir to- carregada de modo norma] (por exem-
quina, deverá pressionar a tecla 1. De- da uma série, forneça apenas o endere- plo, no MSX deve-se utilizar o coman-
pois de fornecer um endereço inicial pa- ço do primeiro byte da série; em segui- do BLOAD "CASiROTINA", onde I
mniiiiim 4 CÓDIGO DC MÁQUINA 4

ROTINA é o nome dado à rotina quan- RODE OS PROGRAMAS


do esta Contudo, se o mo-
foi gravada).
nitor na memória da máquina estiver ro-
eno ZX-81 empregue:
dando, voei deverá antes disso pressio-
Uma vez digitado o programa cm có- LST L * USR 16S14
digo de máquina c verificados os possí-
nar <BR£AK> ou <CONTROL>
veis erros, chegou o momento de rodá- Isso coloca o valor dos registros BC
<STOP>. para interrompê-lo.
lo. Lembre-se que ele não reagirá ao co- na variável L, quando o programa em
Lembre-se de repelir CLEAR para —
mando RUN normal. Para rodar pro- código de máquina termina de rodar
proteger uma área de memória para o
gramas em código de máquina, são ne- isso pode não ter nenhuma utilidade pa-
programa em código de máquina, caso
cessárias instruções especiais que variam ra o seu programa, mas no Sinclair os
você tenha desligado a máquina, ou al-
de computador para computador. comandos LET, L, = c USR estão to-
terado a posição do RAMTOP desde
dos nas mesmas teclas, o que simplifica
que o digitou.
o trabalho de digitar.
Com o ZX-81, o seu programa em có-
digo de máquina será automaticamente
carregado da fita junto com o monitor. O Spectrum e o ZX-8 1 utilizam a fun-
ção USR (abreviatura de USer Routine)
do BASIC, seguida de um endereço ini- OTRS-Color também possui instru-
cial do programa em código de máqui- ções para executar programas em códi-
Para exemplificar o uso do monitor, na. O USR faz retornar o valor decimal go de máquina. F.XEC é um desses
tente o programa listado abaixo. Com contido no registro interno BC do mi- comandos; deve ser seguido pelo endere-
exceção dos micros da linha MSX, esse croprocessador, uma vez que se tenha ço inicial da rotina em código de máqui-
programa rola a tela para trás —
isto e, completado a execução da rotina em có- na que você quiser rodar. Por exemplo:
de cima para baixo e não o contrário. digo de máquina. Isto não é muito útil EXEC 24000
Para o MSX, a rotina apresentada ser- para voei, no momento, mas significa
ve para preencher a tela com traços co- que se esse retorno não ocorrer normal- rodará a rotina do código de má-
loridos (c o mesmo programa apresen- mente o programa em código de máqui- quina que se inicia na locação de memó-
tado na primeira lição desta série). En- na não deve ter rodado corretamente. ria em 24000 decimal. Existe também a
tre a rotina adequada à sua máquina, O USR não é um comando, mas sim função USR, que aceita parâmetros ou
utilizando o programa monitor. Termi- uma função, E a estrutura do BASIC do variáveis para serem passados entre o
ne digitando um sinal # Sinclair exige que uma linha executada programa BASIC e a rotina em código
seja iniciada com um comando. Assim, de máquina. Antes de começar, você
o USR deve ser prefaciado por uma pa- precisa definir onde deve se iniciar a ro-
lavra de comando, Se você utilizou os tina cm código de máquina. Isso deve
8E 05 E0 A6 84 A7 69 FE endereços iniciais sugeridos neste artigo, ser feito por meio da instrução DE-
00 30 88 EO A6 84 A7 88 para o Spectrum, faça: FUSR, seguida de um número de 0 a 9.
20 8C 04 00 2C F3 30 89 Assim, você pode definir até 10 rotinas
02 01 BC 06 00 25 E4 39 BANDOMIZE USR 32000 USR diferentes dentro de um programa
e no ZX-81 utilize: em BASIC. Quando DEFUSR não é se-
RAND USR 16514 guido de um número o computador es-
tabelece que seu significado equivale a
(observe que a teclaRAND no Spectrum DEFUSR 0. A sintaxe normal em um
21 9F 58 11 BF 58 06 0B fornece RANDOM1ZE na tela. No programa BASIC é:
25 15 E5 D5
£0 B6 06 02
C5 01 AO 00 ZX-81 a teclaRAMD fornece RAND na 10 DEFUSRl 24000
C5 D5 11 00 tela). Em si comando nâo tem
próprio, o
F9 19 DI 01 20 00 ED 88
sentido, mas ele dá resultado quando Isso define a rotina USR número 1
E5 21 00 F9 19 EB El 01
E0 00 EB BB Cl 10 E5 Cl você rodar a rotina em código de má- como se iniciando na locação 24000 de-
Dl El 10 04 21 00 F 06 quina. Lembre-se de que a linha acima cimal da memória.
08 C5 24 E5 AF 77 54 5D é apenas um exemplo. Troque o núme- A função que realmente executa o có-
13 01 1F 00 ED BO El Cl ro que vem depois de USR pelo endere- digo de máquina é USR. Devido a um
10 EF 21 9F 5A 11 BF 5A ço decimal inicial de seu programa, for- defeito na ROM, para chamar uma ro-
01 AO 02 ED B8 21 00 58 necido para o monitor quando digitado- tina de código de máquina do TRS-
11 01 58 3A 8D 5C 77 01 Na verdade, qualquer comando BASIC Color, USR deve ser seguida de 0 e o nú-
1F 00 ED BO C9 t pode ser utilizado para prefaciar USR. Por mero da rotina que você já definiu.
exemplo, o PRINT USR 32000, embo- A sintaxe normal é:
ra este, na verdade, imprima o valor do
P - USROl(Q) ou PRINT USA01 (Q)
par de registros BC na tela, e isso sem-
01 18 03 2A 0C 40 09 54 USR
5D 01 F7 02 2A 0C 40 09
pre seja desejável. A função copia o valor da va-
ED B8 2A 0C 40 23 36 00
riável Q no acumulador interno do mi-
54 5D 13 01 1F 00 ED 80 RANDOMIZE USR 32000 ou croprocessador. Assim, ela pode ser
RAND USR 16514) é mais utilizado captada e usada pela rotina em código
porque evita efeitos colaterais indeseja- de máquina, se for necessário.
dos. Mas deverá ser evitado se você es- Neste exemplo, quando a rotina em
tiver utilizando números aleatórios em código de máquina termina sua execução,
ED 6B 02 03 3E 19 06 qualquer parte do programa, pois ele irá os conteúdos do acumulador retomam
ED B3 3D 20 FA C9 02 acionar o gerador de números aleatórios ao programa BASIC, como variável P.
F9 C9 | novamente. Então. utilize no Spectrum: Como em outros casos, variáveis de
4 CÓDIGO D£ MÁQUINA 4

stríng também podem ser transmitidas do a rotina em código de máquina termi- número em decimal c negativo pois é o
programa em BASIC
entre o e progra- na sua execução, os conteúdos do acumu- complemento do número decimal que
mas em código de máquina. lador retornam ao programa BASIC, co- normalmente apareceria como negativo.
mo a variável P. Para a rotina apresenta- Uma observação final para a rotina
da neste programa, é necessário preparar de exemplo para o MSX ela usa a tela
:

a teia gráfica antes de chamá-la, pois ela gráfica (SCREEN1); por isso.se o lei-
Para executar programas em código não faz isso internamente. Para executá- tor acidentalmente rodar a rotina sem
de máquina, o MSX utiliza a função do la, faça o seguinte programa e rode-o com o programa dado acima (que retorna
BASIC chamada USR (abreviatura do 0 comando RUN: as coisas ao normal), deverá digitar
USer Routine), seguida de um endereço SCREEN O e pressionar a tecla
inicial do programa de código de máqui-
1 SCREEN 1 < RETUR.N > depois.
2 PSET(0,0)
na. A USR retoma o valor decimal con-
3 A-USR(B)
tido em um par de registros internos do
4 GOTO 4
microprocessador, uma vez que se tenha
completado a execução da rotina em có- Como foi reservado o espaço em
digo de máquina. Isto não é muito útil RAM acima de &HE000, usamos o en-
para você, no momento, mas, se este re- dereço inicial - 8 191 ou §HE00l , em he-
torno não ocorrer normalmente, signifi- xadecimal, de modo a iniciar o USR. O
ca que o programa em código de máqui-
na não deve tef rodado cor ret a mente.
A função USR aceita também parâ-
metros ou variáveis para serem passa-
dos entre o programa BASIC e a rotina
em código de máquina.
Como já foi dito anteriormente,
USR é uma função e não um coman-
do. Ora. a estrutura do BASIC do MSX
impõe que ela esteja contida numa li-
nha iniciada com um comando. Pode-
mos utilizar então algo do género:
P - USR(Q) ou PP.INT USR(Q)
A função USR copia o valor da va-
riável Q
no acumulador interno do mi-
croprocessador. Assim, ele pode ser cap-
tado e usado pela rotina em código de
máquina, em caso de necessidade.
Tal como nos exemplos já vistos, quan-
2
3

IIIIIIIIIIIHI

© ©UE SÃ Todos aqueles Xs e Ys esquisitos nos


programas tornam-se simples quando
se entende realmente sua função.

diáve Aprenda como trabalhar com variáveis


em seus próprios programas.

Quando você quiser armazenar uma ra C, acima. Mas se você digitar:


informação qualquer na memória do
PRINT C
computador, será necessário, identificá-
la; do contrário, o computador será ca- verá que o valor de C permanece inal-
paz de descobrir onde está a informa- terado. Para modificar o valor de C,
ção no momento em que você precisar aumentando-o para 30, por exemplo, di-
dela novamente. Muitas vezes a infor- gite diretamente:
mação que se pretende armazenar con- LET c •

siste em um número cujo valor se mo-


difica sempre que o computador execu-
ta uma repetição (laço) em uma seção
do programa. Abaixo temos um exem-
plo de uma situação desse tipo: Note que a linha de comando acima
não Faz sentido do ponto de vista mate-
mático. Entretanto, o comando LET
10 LET X-0 não deve ser entendido como uma equa-
20 LET X-X+1 ção, apesar do sinal de igualdade. A de-
30 PRINT X; "
;
claração acima significa apenas: "tome
40 FOR T-0 TO 10 o valor numérico armazenado na variá-
S0 NEXT T vel C, some 5 a ele, e coloque de volta
60 GOTO 20 o resultado na variável C". O que acon-
A linha 60 cria o laço, fazendo com tece é que o valor anterior presente em
que o programa se repita indefinidamen- C (no caso, 25) é apagado quando ar-
te.O número representado por X (ori- mazenamos um novo valor na variável.
ginalmente zerado pela linha 10) atinge
a linha 20 e é aumentado em 1 O X é .

chamado de variável numérica, pois ar- OS NOMES DAS VARIÁVEIS


mazena um número.
Para entender melhor como funciona A combinação de caracteres permiti-
uma variável numérica, imaginemos que dos pelo BASIC para se dar nomes às
a memória do computador é constituí- variáveis numéricas difere de computa-
da por uma série de caixas ou comparti- dor para computador. As principais re-
mentos. Cada caixa recebe um nome. gras são mostradas no box na página 99.
Num computador simples, esses nomes Mas uma coisa que nenhum compu-
poderão ser letras do alfabeto. Para ar- tador aceitará é um nome de variável que
mazenar um número na memória, bas- se inicie por um número. Por exemplo:
tará atribuir esse valor a uma das caixas: LET 7 14
LET c '
25
um programa curto que simula a ação
não tem sentido. Um nome de variável de uma bomba "universal" de combus-
Essa instrução armazena o valor 25 pode incluir números (exemplos: VAR7, tível (gasolina, álcool, etc.) e que fun-
na variável C. Nem todos os computa- A1985, etc), mas o primeiro caractere ciona de maneira muito interessante:
dores exigem o emprego do comando precisa ser sempre uma letra. Além dis-
LET, mas é uma boa
idéia incluí-lo até so, não é permitido utilizar como nome
que você esteja experiente. de variáveis palavras que representem
Umavez armazenado, esse valor po- comandos, como TO, THEN, OR ou 10 LET LITROS-0
de ser utilizado por outras declarações AND, etc. Alguns micros não aceitam 20 LET CRUZ-Q
em outros cálculos, etc. Você pode di- que essas palavras-chaves façam parte 30 CLS PRINT
!

gitar, por exemplo: do nome da variável: a variável BEND, 40 PRINT " ESCOLHA O COMBUSTIVE
não seria aceita pelo interpretador BA- L: aLCOOL gASOLINA
SIC, pois inclui a expressão END. dIESEL
50 INPUT AS
60 IF AS-"A" THEN GTY-0 .

PRINT C/5 VARIÁVEIS EM AÇÃ0 70 IF AS-"G" THEN QTY-0 .

80 IF AS-"D" THEN ÇjTY-0.4


Essas declarações deverão fornecer as 90 CLS
I respostas 100 e 5 respectivamente, se A maioria, dos programas que você 100 PRINT êl 30 "COMBUSTÍVEL
,
"|
I continuarmos com o valor definido pa- escrever utilizará diversas variáveis. Eis AS
IIIIIIIHHMH lllllllll
0 QUE Ê UMA VARIÁVEL? 0 QUE E CORDÃO (STRINGI
COMO SAO UTILIZADAS AS VARIÁVEIS NUMÉRICAS E

VARIÁVEIS? ALFANUMÉRICAS
VARIÁVEIS DE CONTROLE CORDOES VAZIOS E
PARA LAÇOS F0R...NEXT PROGRAMAÇÃO DE JOGOS

110 PBINT §199, "LITROS" 120 PRINT §512, "PREÇO A PAGAR" 90 CLS
120 PBINT §256. "PREÇO A PAGAS" 160 PRINT §396, LITROS; 100 IF INKEYS"= "n" THEN LET cr
130 LET K-PEEK<344) 170 PRINT §526,CRU2;"MIL CRU- uz-cruz+1: LET litroa-INT ((ll
140 IF K-251 THEN CLS:GOTO 10 ZEIROS" :
tros+qty) -10) /10
150 IF K-253 THEN LET CHUZ-CRUZ 105 PRINT AT 6,2;"COMBUSTIVEL
" íAS
+1:LET LITROS-INT(<LITROS+QTY)*
10) /IO 110 PRINT AT 9,7; LITROS"
160 PBINT §206. LITROS 120 PBINT AT 9,15: ítros;
170 PRINT §270,CRUZ;"MIL CRUZEI 10 LET ll 130 PRINT AT 12,0; PREÇO A PAG
HOS" 20 LET cri AR"
200 GOTO 130 40 PRINT 140 PRINT AT 12.15;cruz;" mi:

Atenção: o programa listado acima 45 PRINT "A(lc 150 IF INKEYS-"f" THEN CLS
rodará apenas nos compatíveis com o GOTO 10
TRS-Color. Para poder executá-lo tam- 200 GOTO 100
bém em micros da linha TRS-80, faça THEN LET <jty-l/
as seguintes modificações:
THEN LET dty-1
100 PBINT §258 "COMBUSTÍVEL
.

IF A5-"d" THEN LET qty-1/


110 PRINT 6365, "LITROS"
IIIIIIIIIIIIHHHHaHMUHlIIIIIIIIII!
20 LET CHUZ-0
40 PRINT " ESCOLHA O C0MBU5TIV
"
EL:
45 PRINT "A(LCOOL) G(ASOLIN
A) D ( IESEL)
50 INPUT AS
60 IF AS""A" THEN LET QTY-1/3
70 IF AS-"G" THEN LET QTY-1/5
80 IF AS-"D" THEN LET QTY-1/3
90 CLS
100 IF INKEYS<>"N" THEN GOTO 10
5
101 LET CRUZ-CRUZ+1
102 LET LITROS-LITROS+QTY
105 PRINT AT 6,2; "COMBUSTÍVEL
" ;AS
110 PRINT AT 9.7;"LITROS"
120 PRINT AT 9.15;LITROS;
130 PRINT AT 12.0;"PRECO A PAGA
B"
140 PRINT AT 12,15; CRUZ " MIL C r

RUZEIROS"
150 IF INKEYS- "F " THEN RUN
200 GOTO 100

5 REM "««TECLE A BARRA DE ESPAÇ


OS PARA LIGAR A BOMBA E D PARA
DESLIGA-LA*** 50 PRINT : HTAB 5: PRINT "1- A de litros de combustível (variável
10 LET LITROS-0 LCOOL* CRUZ, inicialmente zerada na linha
20 LET CRUZEIROS-0 HTAB 5: PRINT "2- GASOLINA"
60 20, bem como a variável LITROS).
30 CLS LOCATE 1 0 PRINT "BOMBA DE 70 HTAB 5: PRINT "3- DIESEL" Enquanto a tecla N estiver sendo pres-
: :

COMBUSTÍVEL" 80 VTAB 15: HTAB 10: INPUT "Op


40 PRINT:PRINT:PRINT"Escolha O sionada, o programa continuará avan-
cao ->";C
aeu combuat ível çando; ao atingir a linha 200, ele re-
90 IF C * 1 THEN P - 1 / 3.1
50 LOCATE 10 5 PRINT"1- álcool" tornará à linha 130 (100 no Speccrum),
. :
100 IF C ' 2 THEN P » 1 / 4.7
60 LOCATE 10.6:PRINT"2- gaaolin 110 IF C - 3 THEN P - 1 / 3.5 e manterá o medidor funcionando. Pa-
120 HOME ra terminar de abastecer, pressione a
130 VTAB 5: HTAB 10: PRINT "Co letra F.
mbuativel ":C » A presença na tela de fraçÒes deci-
140 VTAB 10: HTAB 10: PRINT "P mais com muitos dígitos revela a impre-
90 IF C-l THEN P-l/3 .
reco a pagar ->" cisão própria do computador, quando
100 IF C-2 THEN P-l/4.7 150 PRINT HTAB 17: PRINT "Ll
110 IF C-3 THEN P-l/3.
:

é feita aconversão de números binários


troa ->" internos, para decimais comuns.
120 CLS 160 GET INS: IF INS - CHRS (7
130 LOCATE 10.5:PRINT"Combustív 0) THEN END VARIÁVEIS DE CONTROLE
el "iC 165 IF INS < > CHRS (321 THE
140 LOCATE 10 10 PRINT"Preço a. :

N 160
pagar ->" 170 CR - CR + 1000:LI - LI + P Assim como são utilizadas em decla-
150 LOCATE 17,12:PRINT"Litros-> 180 VTAB 10: HTAB 26: PRINT CR rações LET, as variáveis também podem
190 VTAB 12: HTAB 26: PRINT I aparecer em laços FOR...NEXT, como
160 INS-INKEYS IF INS-CHRS (68) :
NT (LI * 100 + .5) / 100 você já deve ter percebido. Neste caso,
THEN END 200 GOTO 160 a variável que é alterada a cada repeti-
165 IF INS<>CHRS<32)THEN 160
170 CR-CR+1000 LI-LI+P :
ção do laço é chamada de variável de
Vale a pena experimentar esse pro- controle.
180 LOCATE 26, 10: PRINT CR
190 LOCATE 26.12:PRINT LI grama de muitas maneiras, até entender Em alguns computadores, os carac-
200 GOTO 160 como ele funciona, pois há nele um con- teres empregados para dar nome às va-
junto razoável de variáveis.

um
5 REM «"TECLE A BARRA DE ESPA
A função de algumas delas é bastan
te evidente: a variável A, por exemplo,
seleciona o tipo de combustível, através
riáveisde controle não podem ser aplica-
dos a variáveis numéricas (veja quadro).
Nos micros da linha Sinclair, por exem-
plo, você pode digitar:
COS PARA RODAR A BOMBA E F PARA de um numero (1 2 ou 3) e determina,
,

TERMINAR nas linhas 60 a 80, qual é a fração de li-


10 LET LITROS - 0
tro do combustível escolhido que vale
20 LET CRUZEIROS - 0
30 HOME HTAB 10: PRINT "BOMB
:
mil cruzados.
A DE COMBUSTÍVEL" A tecla N aciona a bomba que mede para variáveis numéricas, mas não po-
140 PRINT PRINT "Escolha o se
: o fluxo de combustível. O programa de utilizar nomes como estes em instru-
I u combustível
:
começa então a incrementar o número ções FOR...NEXT, tais como em:
IIIIIIIIIIHHM llllllllll
FOR TEMPO - 1 TO 99999 i você pode e não pode usar
Aoinvés disso, você é obrigado a em-
pregar a variável de controle com uma
única letra,como por exemplo T. Os ou-
Mi DE D3
tros computadores (linhas TRS, Apple
e MSX) não têm essa exigência.

VARIÁVEIS ALFANUMÉRICAS
reconhecidas.
E se, além de números, quisermos ar-
No TRS-Color, só
mazenar na memória do computador in-
formações como nomes, endereços, etc? No Spectrurr las No TRS-80
As variáveis capazes de armazenar um maiúsculas e m hâ conversão au
conjunto de caracteres, incluindo letras núsculas. mas S
maiúsculas sâ
e números, são chamadas de variáveis al- reconhecidas.
fanuméricas, em BASIC. Outra denomi-
nação usada é a de cordão (ou string, em
Caracteres espe Caracteres espe Caracteres aspe
inglês). Para facilitar a compreensão des-
se novo elemenio, podemos partir de permitidos. nâo permitidos. não permitidos. não permitidos.
uma comparação: um cordão funciona
como uma espécie de sacola de compras. Espaços no no- Espaços no no Espaços no no-
Você pode enchê-la com um grande nú- me: não permiti-
mero de artigos e manejá-la como uma
unidade — sem ter que ocupar-se com Variável numéri- Variável numêri-
cada artigo separadamente. Da mesma
forma, um único nome de variável alfa-
numérica serve para caracterizar várias
memórias, simultaneamente.
Os cordoes podem conter quase tu-
cas, seguida de
do: letras, números, sinais de pontua-
ção, espaço em branco, e até mesmo ca- CI3
racteres gráficos. Eles devem estar sem- DEFSTR
pre delimitados entre aspas

"NOMES E ENDEREÇOS DE ções matemáticas com um cordão, como


somas, multiplicações, divisões e outras.
DEDSMQEIE
CLIENTES". Para provar isso, rode o programa 10 LET AS-"POR FAVOR, DIGITE QU
abaixo: ANT0S"
"POR FAVOR ENTRE AGORA SUA 20 LET VOCE QUER"
RESPOSTA"
ti í/,'íhB5S 30 PRINT AS; 'HAMBURGERES" BS
35 INPUT H
;

10 PRINT "2+2- " 40 PRINT AS SACOS DE FRITAS"


20 FOR N-l TO 40
25 NEXT N 45 INPUT S
30 PRINT 1+2-2 50 PRINT AS;" MILK SHAKES";BS
"NE 135 S 181" 55 INPUT M
O conteúdo do cordão (entre aspas) 60 PRINT "OBRIGADO. IRA CUSTAR
O exemplo seguinte também é um é impresso como você o entrou. Na ver- "
; (
H" 15000+S-5000+M* 13000)
cordão, embora apenas alguns compu- dade, somente a linha 30 é calculada, e
" POR FAVOR."
tadores, como o Spectrum, o TK-2000 seu resultado, impresso (a linha 20 simu-
e o MSX, permitam que se possa digitá- la o tempo que o computador está "gas- A possibilidade de reduzir o tamanho
los desta forma diretamente no teclado: tando" para pensar, antes de fornecer dos programas é a razão pela qual sis-
sua resposta). No MSX, no Apple e no temas de processamento de dados e de
A linguagem BASIC tem recursos pa- TRS-80, modifique 40 para 2000, para textos —
que incluem informações e
ra manipular cordões alfanuméricos de um retardo razoável de tempo. mensagens muito utilizadas, tais como
diversas maneiras. Por exemplo, existem Mas se quiser utilizar o mesmo cor- "número da conta do cliente" e "pre-
funções e operações para juntar dois ou dão mais de uma vez, pode economizar ço por milhar" e "18% de ICM" uti- —
mais cordões uns nos outros (operação tempo de digitação (e espaço em memó- lizam variáveis alfanuméricas.
de concatenação), ou para dividi-los em ria) um
rótulo para ele. Esse ró-
criando Você também poderá empregá-las na
dois ou mais subcordões tulo é chamado também de variável al- programação de jogos. Suponhamos que,
Entretanto, o computador não "en- fanumérica. Sua extensão pode variar de em um jogo, seja necessário a todo mo-
tende" o que está dentro de um cordão um computador para outro (veja qua- mento colocar na tela uma linha enorme
e reproduz o conteúdo deste sempre de dro) mas a variável deve ser sempre se- de símbolos gráficos o muro de uma —
forma exatamente igual, mesmo que ele guida por um sinal de cifrão ($). prisão para um jogo de aventuras, por
esteja escrito em sânscrito ou alemão. Eis aqui, por exemplo, um sistema au- exemplo. Tudo o que você precisa fazer
Não é possível, também, efetuar opera- tomático de pedidos em uma lanchonete: é digitá-lo uma única vez, "rotulá-lo" e
IIIIIIIIIIHHH lllllllll
A PARA UOCES " + BS

40 FOR N-l TO 80
50 LOCATE 0,7:PRINT MIDS(AS.N,3
9)
60 LOCATE 0,14:PRINT MID5(AS,81
-N, 39)
65 FOR X-l TO 50 : NEXT
70 NEXT

utilizá-lo sempre que quiser. " REM 40 ES : — quando ele atinge a linha 20 simples-
Movimente esse cordão por toda a te- PAÇOS mente lê esse cordão e o imprime.
como mostramos no programa: 30 A$ - B$ + " UMA FELIZ
la, Ao mesmo tempo, é necessário dar
PÁSCOA PARA UOCES " + BS

35 INVERSE um rótulo para o nome que vai ser en-


40 FOR TO 80N-l trado. Assim, ele poderá ser diferente ca-
50 VTAB 7; PRINT MIDS (AS.N,4 da vez que o programa for rodado. Ele
0) é armazenado em uma variável, na linha
60 VTAB 14: PRINT MIDS (AS, 81 20 do programa, e usado na linha 30.
- N.40) Existem computadores que admitem
20 LET AS=B$+" UMA FELIZ PASÇO 65 FOR X - 1 TO 100: NEXT uma forma mais curta e mais clara de
A PARA VOCES"+BS
30 FOR N-l TO 65
70 NEXT programação da declaração INPUT,
40 PRINT ei60.MIDS(AS.N.32)
80 GOTO 40 através da combinação do PRINT
50 PRINT §320,MIDS(AS.66-N,32) "mensagem" da linha 10, com o IN-
60 SOUND N*3,1:NEXT N Aqui você tem um cordão enorme, co- PUT da linha 20:
80 GOTO 30 mo mostramos na linha 20 todos os —
espaços na linha 10, mais a mensagem,
Para rodar o programa acima nos mi- colocados juntos. Mais adiante, veremos
cros da linha TRS-80, substitua as linhas como isso é feito, e como o cordão é
40, 50 e 60; assim: "cortado" novamente para caber na te-
la. Mas, se nesse meio tempo você qui-
40 PRINT e320,MID$(AS,N,32)
ser modificar a mensagem, certifique-se
50 PRINT e640,MIDSÍA3.66-N.32)
60 NEXT N de que sua nova declaração, incluindo os
espaços, tem a mesma extensão da origi-
nai. De outro modo você terá que desco-
brir o que significam os números nas li Outro modo de trabalhar com variá-
nhãs 40 a 55 e modificá-los. veis alfanuméricas já foi mostrado an-
10 LET BS = "
As variáveis alfanuméricas são tam teriormente na lição "Apontar. ..Fogo!"
20 LET A3-BS+" UMA FELIZ bém muito empregadas quando o pro- (págs. 28 e 33 ). Embora varie de com-
PÁSCOA P ARA VOCÊS "+BS grama precisa entrar uma informação putador para computador a forma de
30 FOR N-l TO 65 que é sempre modificada. Por exemplo: escrever uma variável, nesse caso, é esta:
40 PRINT INK 2;AT 8.0;AS(N
TO N+31) 20 IF AS THEN GOTO 10
50 PRINT INK 2;AT 12,0;AS(66
-N TO 97-N) "
As duas aspas sem nada entre elas são
10 PRINT "QUAL E O SEU NOME conhecidas como um cordão nulo ou va-
60 SOUND .02. N/2 20 INPUT NS
70 NEXT N zio. A linha de programa significa: "se
30 PRINT "ALO,
60 GOTO 30
" ;NS
a entrada for igual a nada" —
isto é, se
Neste programa a linha 10 imprime nenhuma sendo pressiona-
tecla estiver
o seguinte cordão na tecla: QUAL É O da — "volte para a linha 10 e espere até
SEU NOME, seguido por um ponto de que uma tecla seja pressionada". Isto
10 LET BS-" interrogação. O computador espera que evita que o computador salte para outra
você entre um nome (um outro cordão) parte do programa tão rapidamente que
20 LET AS-BS+" UMA FELIZ PA e o chama de NS. Na linha 30, ele im- o jogador não tenha tempo de pressio-
SCOA PARA VOCÊS "+8S prime o cordão "ALO", e chama de nar uma tecla de comando qualquer, ou
30 FOR N-l TO 65
volta o cordão NS armazenado na linha de ver um resultado ou gráfico na tela.
40 PRINT AT 8.0;AS(N TO N+31)
50 PRINT AT 12.0;AS(66-N TO 97
acima. Assim será exibido na tela: Duas aspas com um espaço em bran-
-N) co entre elas, no entanto, são uma coi-
ALO , TOM ( ou PAULO ou PEDRO )
sa muito diferente. Se você modificar a
ou qualquer outro. Observe que, aqui, linha:
os cordões QUAL É O SEU NOME e
20 IF as THEN GOTO 10
ALO não são armazenados dentro de
variáveis, tais como A$ ou QUE$ ou o programa retrocederá à linha 10 ape-
10 CLS CLEAR 1000 ALOS, porque eles aparecem apenas nas se o caractere entrado pelo jogador

:

20 BS-SPACES (40 uma vez no programa, e o computador for um espaço isto é, se ele estiver
30 AS-BS+" UMA FELIZ PASÇO não precisa se lembrar do que seja ALO pressionando a tecla de espaço.
5 mOGKAMAÇÃODÍJOOOS 5

IDEIAS PARA UM COMO DESENHAR NA TELA


JOGO ESPACIAL OS ELEMENTOS DO JOGO
INCLU A MOVIMENTO
MÍSSEIS: ELEMENTO DE PERIGO
COMO CONTROLAR O JOGO

Batalhas interplanetárias foram sempre Os jogos para micros ficam muito de alta resolução são bem mais comple-
melhores quando os recursos gráficos de xos do que aqueles que trabalham ape-
um dos pratos fortes dos livros de
do computador são bem nas com os caracteres pré-programados
alia resolução
ficção cientifica, inspirando até mesmo aproveitados. Esses gráficos permitem do teclado, mas os resultados certamen-
a estratégia de "Guerra nas Estrelas" cenas muito mais delalhadas do que os te valerão o esforço.
simples caracteres ASCII (ou gráficos de Muitos jogos para computador do ti-
proposta por Ronald Reagan. No
baixa resolução), com os quais apren- po videogame envolvem oponentes, in-
computador, elas podem ser tema de demos a lidar até agora. Evidentemen- vasores extraterrestres ou outros adver-
um jogo fascinante. te, os programas que utilizam gráficos sários que revidam os disparos ao invés
1

IIIIIIIIIIIHI * RROORAMAÇÃODUOCOS 5 ]H|||||||||||


de esperarem tranquilamente que você os dentro da área utilizada por aquela de- \imanar um ir sentido diag
aniquile. finida neste jogo. Caso contrário, as no video. A linha 40 estabelece na tela
Agora, vamos ver um jogo chamado blindagens defensivas poderão ser su- a posição final de um indicador de com-
Estação Espacial, adequado a todos os perpostas, tornando necessárias modi- bustível.
tipos de computador (com exceçào do ficações mais drásticas do programa. A linha 50 desenha a nave na tela, len-
ZX-81 e do Apple II). que vai ensiná-lo do os códigos gráficos correspondentes
a fazer rotinas gráficas para movimen- através de instruções e READ DATA
na
tar aleatoriamente uma nave extraterres- linha 250, e colocando-os na página de
tre inimiga na tela, bem como lançar vídeo, no canto superior esquerdo da te-
mísseis contra um alvo —
no caso, a es- Digite e execute o programa abaixo: la, com comandos POKE. A linha 60 usa

tação espacial controlada por você. a função GET para capturar esse padrão
10 PCLEAR 4:PM0DE 4.1:PCLS
Ojogador dispõe de 4 blindagens que 15 SCHEEN 1 ,
gráfico definido pelo bioco que vai de 0.7
poderá utilizar para se proteger dos ata- 20 DIM AL(6) ,BL(6) ,BO{4) a 7,7 na (ela, e armazená-lo no conjun-
ques dos mísseis inimigos. Entretanto, 30 DEFFNZ{X]-SGN<X)*SÇjfi(V*V*X*X to denominado AL.
você não pode mantê-las "ligadas" du- / ( (127-AX)* (127-AX) +(95-A¥) * (95 A linha 65 também é temporária. Tu-
rante todo o tempo, pois a quantidade -AY))) do o que ela faz é manter a tela "con-
de combustível destinada a alimentar 40 LET PW'250 gelada", de modo que se possa ver o re-
50 FQP. 1-0 TO 7 BEAD A:POKE 153
:
sultado do processamento feito pelas li-
sua potência é limitada.
6+-I*32,A:NEXT I
Para tornar o jogo mais difícil, o pro- nhas anteriores. Ela será removida mais
60 GET (0,0) -(7,7) AL.G ,

grama não só movimenta a nave inimi- tarde, quando o resto do jogo for acres-
65 GOTO 65
ga de um lado para o outro, mas pode 250 DATA 24.126,90,126,126,195. centado ao programa.
também fazê-la desaparecer subitamente 129,129
dentro do hiperespaço e reaparecer em
algum lugar inteiramente inesperado. Você verá a nave espacial extraterres-
Do modo como foi descrito, o jogo tre aparecer na tela.
não está realmente completo; assim, na- Osgráficos de alta resolução são Agora, remova a linha 65. digitando
da existe nele para medir a passagem do apresentados na linha 10. Neste estágio o número 65 seguido de <ENTER>:
'

tempo e os pontos, o que pode diminuir a tela é ligada na linha 15; assim, você depois, acrescente essas linhas e to
o interesse pelo combate. Mas isso po- poderá ver como o programa funciona, programa.
de ser facilmente resolvido utilizando- porém, mais tarde, quando o jogo esti-
se os métodos explicados nas páginas 61 ver completo, a linha será removida.
a 67. Os conjuntos que conterão a nave ex-
Embora a nave extraterrestre seja traterrestre (AL), o míssil (BO) e um
bem parecida com as dos fliperamas, a bloco em branco (BL) são dimensiona-
estação espacial é apenas um esboço. dos pela linha 20. A linha 30 utiliza a
Você pode replanejá-la, se quiser gastar expressão DEITN que significa DEFi-
meia hora de modo interessante, utili- ne a FuNctiort. Caso seja necessário em-
zando para isso gráficos que você mes- pregar com frequência uma longa ex-
mo definirá. Os proprietários de micros pressão matemática no programa, a fun-
da linha MSX podem ainda trabalhar
com gráficos programáveis chamados
sprites,que explicaremos em detalhes
mais adiante. No entanto, mantenha o
gráfico da sua nova estação espacial

J=0 TO 4 BEAD A-POKE 153


1 :

!.A:NEXT J
GET (0,0)-(4,4) .BO.G
I

85 GOTO 85
260 DATA 32.112.248.112.32

O míssil que será lançado pelo E.T.


é lido em conjunto de códigos em DA-
TA, e desenhado com o auxílio de co-
mandos POKE no canto superior esquer-
do da tela. Da mesma forma que ante-
riormente, usamos GET para registrar
essa forma no conjunto BO.
pçâo predefinida o poupara de digita-la Não importa que o foguete desenha-
r diversas vez.es em diferentes pontos do do na leia se sobreponha ao desenho an-
-programa. Ela funciona, portanto, co- teriorda nave inimiga, deixando ainda,
Imo uma espécie de sub-rotina em uma aparentemente, vestígios dela, pois a li-
linha só. A expressão matemática na li- nha 80 apenas memoriza com o GET a
Ktiha 30 é chamada de KNZ e será utili- área ocupada pelo míssil e não os seus
zada mais tarde no programa para mo- arredores.
PROGRAMAÇÃO DE JOGOS 5
IIIHIIIIIHIH S

CONSTRUA A ESTAÇÃO ESPACIAL


A linha 140 exibe o indicador cheio
de combustível para as blindagens, uti-
Remova a linha 85, digitando 85 se- lizando um método rápido para dese-
guido de < ENTER > acrescente essas
, nhar retângulos. Usamos a instrução LI-
linhas, e depois execute o programa. NE para traçar uma linha no alto da te-
1 """
la, indo da posição extrema esquei"
90 LET AX-RND(24B)-1:LET AY-RND (coordenadas 25,1) até ;

(17B>+5
100 PCLS
110 CIRCLEU27.95) 12 5 DRAWBM . , :

127,95 :C5S4BNUNLNDNR"
115 GOTO 115

A linha 90 escolhe uma


posição alea-
tória para a nave E.T. A linha 100 lim-
pa a tela e a linha 1 10 desenha a esta-
^ A nave E.T. (extraterrestre) é contro-
ção espadai, que é simplesmente um cir- lada de forma semelhante à base de mís-
seis da lição Apontar... Fogo! (páginas
28 a 33). A linha 1000 iguala as coorde-
nadas da última posição da nave às
coordenadas da posição atual, antes que
cia seja movimentada.
A linha 1010 escolhe um número
aleatório para que a nave inimiga possa
mudar de posição na tela. Se esse núme-
ro for 1 (ou seja, em 10^o das vezes, em
combustível no momento (assinalada média), então o E.T. saltará para uma
peta variável PW). O
comando PSET nova posição na Se o número não
tela.

diz ao TRS-Color para traçar essa linha for 1, será escolhida uma nova posição
em branco opaco e. deste modo, esta- para a nave, distante entre -7 e + 7 pon-
belece a cor. BF é uma abreviação para tos na direção X (da esquerda para a di-
box fill 'preencher a caixa) e "pinta" o reita), e entre -7 e +7 pontos na tela,
í

retângulo com a cor utilizada pela linha na direção Y (de cima para baixo) ve-—
original. Sc você quiser traçar um retân- ja a linha 1020. A linha 1030 impede que
gulo vazio, utilize B ao invés de BF. Es- a nave E.T. sobreponha-se à estação es-
HnlO (comando C1RCLE). O comando tão agora completos os gráficos de alta pacial, enquanto as linhas 1040 a 1070
'
DRAW, no final dessa linha, traça uma resolução para o jogo. O
resto do pro- não permilem que ela saia para fora da
cruz bem no meio da estação espacial. grama está relacionado com o movimen- tela.

Bssc comando* DRAW) pode ser imagi- to do E.T. e do míssil e a ativação das A nave invasora é apagada na linha
nado como uma sucessão de declarações blindagens. 1080, colocando-se uma série de gráfi-
LINE, como já se explicou na lição an- cos em branco nas últimas posições; em
terior de programação BASIC. Ele será seguida, ela é posta na nova posição pela
MOVIMENTE A NAVE INIMIGA
melhor explicado numa lição posterior. linha 1090. Alinha 100 retorna o pro-
1

grama à linha 160, que, a propósito, ain-


Existem três sub-rotinas que devem da não foi inserida.
DESENHE 0 INDICADOR DE COMBUSTÍVEL
ser acrescentadas ao programa. A pri-
meira diz respeito ao movimento da na- COMO DISPARAR OS MÍSSEIS
Remova a linha 115 do mesmo mo-
ve inimiga. Digite-a, mas não a rode ain-
do que removeu as linhas 65 e 85. Acres-
da porque não acontecerá nada.
cente essas linhas e aparecerão na tela A próxima-sub-rotina serve para de-
maiores detalhes gráficos. 1000 LET LX-AX LET LY-AY
:
cidir, em primeiro lugar, se o míssil de-
1010 IF RND(10)=1 THEN LET AX-R ve ser disparado ou não. Caso ocorra o
ND(248)-1:LET AY-RND 1 7B) +5 ( disparo, ela estabelece a posição do mís-
1020 LET AX-AX+RND(15)-8:LET AY sil na tela e define com que blindagem

130 DRAWBM5 1 L4D2NR4D28E4BR2D


,
-AY+RND(15)-B a defesa vai bloqueá-lo.
1030 IF AX>103 AND AX<144 AND A
i

4R3U48R5L3D2NR3D2R3BE4D4R3" 2000 IF RND(7)<>1 THEN RETURN


140 LINE (25 1 - (PW 5) PSET BF
) Y>71 AND AY<112 THEN LET AX-LX:
, ,
2010 V-RND(8)+5:DX-FNZC127-AX)
, ,

145 GOTO 145 LET AY-LY


1040 IF AX<0 THEN LET AX--AX DY-FNZ(95-AY)
1050 IF AX>248 THEN LET AX-497- 2020 IF DXO0 AND DY>-0 THEN LE
A linha 120 traça na estação espacial T HA- 1: GOTO 2050
um número que corresponde ã quanti- AX
2030 IF DX<-0 AND DY<-0 THEN LE
dade de blindagens. Na linha 130 mos- T HA-2:GOTO 2050
tramos a palavra FUEL (combustível). AY 2040 IF DX>-0 AND DY<-0 THEN LE
Infelizmente, o TRS-Color não conse- 1060 PUT (LX LY), - (LX + 7 , LY+7 ) , BL T MA- 3 ELSE LET MA-4
gue escrever caracteres normais numa PSET 2050 LET MX-AX LET MY-AY:

tela gráfica de alta resolução; por isso, 1090 PUT (AX AY), - (AX+7 AY+7) AL
, , 2060 PUT(MX.MY)- (MX+4.MY+4) ,BO,
números devem ser literalmente
letras e PSET OR
"desenhados" com comandos DRAW. 1100 RETURN 2070 LET AF-1 RETURN:
, 1

^UAMAÇÁODÍ JOGOS 5 lllll


240 GOTO 160
Antes de rodar o programa, remova
as linhas 15 e 14 .\ lc\[o h>o, você não
Verá O que esta se desenvolvendo na te-
la durante a definição dos blocos gráfi-
cos. Rodado o programa ocorrerá uma
curta pausa, antes que uma exposição
completa apareça na tela.
A tela gráfica é agora ligada pela li-
nha 150. A linha 160 checa se um míssil
foi disparado. Se AF = 0, isso quer di-
zer que não houve disparos, eoprogra-
ma salta para a sub rotina que se refere
ao lançamento do míssil, que começa na
linha 2000; ou enião o programa pula
para a sub-rotina que mm imcma o mis-
ita ultima começa na linha 3000.
is, a nave E.T. movimenta -se. -\

A linha 2000 decide se dispara um 3040 RETURN


míssil. Existem seis chances em uma de 3050 IF SH'(MA)-0 THEN GOTO 3070
3060 LET AF-OrBETUBN
que ele seja disparado, mas, se já há um
3070 CLS PRINT 0256 "BANG ... SUA
:
,

míssil na tela, o programa não pode dis-


BLINDAGEM ESTAVA DESLIGADA!"
parar outro. Se um foguete não puder
ser disparado, a sub-rotina terminará. O míssil é apagado pela linha 3000,
A linha 2010 estabelece a extensão do e sua nova posição é computada pela li-
deslocamento do míssil na tela —
você nha 3010. A linha 3020 verifica se o mís-
pode pensar em V como se fosse a sua sil já atingiu a blindagem. Se isso não

velocidade. O conteúdo de V é passado aconteceu, o programa pula rapidamen-


para afunçâo FNZ —
definida na linha te para a linha 3050, verificando se a linha 1 7(1 la/ com que o programa s,

30 —de modo a calcular a nova posi- blindagem correia estava posicionada. para sub-rotina
a na linha 1000.
ção do míssil na tela. Quando nenhuma blindagem é encon- A parte do programa das linhas ISO
-1
!

As linhas 2020 a 2040 averiguam o trada no caminho do foguete, o progra- a 220 diz respeito à ativaçào das blin-
ponto em que o míssil está na tela e tam- ma limpa a tela e termina com a mensa- dagens. A linha 190 verifica que tecla es-
bém a blindagem necessária para blo- gem:"BANG! ... SUA BLINDAGEM tá sendo pressionada. Se a tecla for um
quear o míssil — MAé o ângulo de des- ESTAVA DESLIGADA". número de 1 a 4, a linha 2000 desenha-
locamento do míssil. Se o míssil ainda não atingiu o pon- rá a blindagem; se alguma das blinda-
A linha 2050 inicia a irajetória do to esperado para alcançar as blindagens gens for acionada, a linha 210 diminui-
míssil a partir da posição da nave ini- da estação espacial, a linha 3050 o co- rá o combustível.
miga F a linha 2060 coloca o foguete locará rapidamente em nova posição A linha 230 traça um retángulo ne-
na tela ames de a linha 2070 definir a com o comando PUT. gro no final do indicador do combustí-
variável sinalizadora AF= 1, que diz ao A
linha 3040 finaliza a rotina. Para vel, dando a impressão de que o supri-
programa se um míssil foi disparado. terminar, as seguintes linhas completam mento de combustível está acabando, à
Uma mv concluídos esses passos, a sub- o nosso programa: medida que o valor em PW vai dimi-
rotina termina. nuindo. Finalmente, a linha 240 repete
A
sub-rotina finai vai da linha 3000 150 screen 1 , tudo de novo.
á 3070. Digite as linhas, mas novamen- 160 if af-0 then gosub 2000 els
te nada acontecerá se você rodá-las. E GOSUB 3000
170 GOSUB 1000
3000 .PUT(MX.MY) - (KX+4 MY+4)
, , BL 180 FOR J-l TO 4
PSET 190 LET PE-PEEK 336+J) IF Ptf<25
3010 LET MX-MX+DX:LET MY-MY+DY THEN LET PE-225
( :

O programa para o Spectrum utiliza


3020 IF MX>110 AND MX<140 AND M 200 IF <255-PE)/160SH(J) THEN diversos recursos novos que não foram
Y>79 AND MY<108 THEN GOTO 3050 LET SH(J) -1-SH (J) :CIRCLE(127.95 explicados em capítulos anteriores. Por
3030 PUT{MX,MY)-(MX+4,MY+4) ,BO. ), 16,5*SH(J) .1, (J42J/4, (J+3J/4 isso, é aconselhável estudar um pouco es-
OP. 21C IF SHIJJ-1 THEN LET PW-PW-2. ses recursos e fazer algumas experiências.
PROGRAMAÇÃO Dl JOGOS
IIIIIIIIIIHI
-
Como de costume, você pode ir che- tade de omitir a linha 10, pois pode ser 330 LET b-1: IF ABS fy>ABS fx
mais difícil ler o programa listado em THEN LET b-2
cando se os trechos que acabou de en-
340 IF b-1 THEN LET ax-SGN fx
trarfuncionam corretamenie. O primei- amarelo sobre uma leia negra. Se qui-
: LET bv-SCN fy*ABS (fy/fx)
ro grupo de linhas define o gráfico da ser fazer isso, lembre-se de reintegrá-la
350 IF b-2 THEN LET sy-SGN fy
nave extraterrestre e o desenha na tela, mais tarde, ou a linha 640 (explicada : LET ax-SGN fx*ABS (fx/fy)
quando executado. mais adiante) não funcionará. 400 PRINT AT my.inx;" ": LET my
-my+ay: LET mx-mx+ax: PRINT
10 B0RDER 0: PAPER 0: INK 6: INK 5;AT my.mx;CHR$ 145: IF my
BRIGHT 1: CLS CONSTRUA A ESTACÃO ESPACIAL >10 AND my<12 AND mx>15 AND mx
20 FOR n-USR "a" TO USR "b"+7 <17 THEN GOTO 700
: READ a: POKE n,a: NEXT n Estas poucas linhas desenharão a es- 620 IF RND>.9 THEN PRINT AT a
ZOO LET ax^INT (RND-32) y ax; " " GOTO 200
tação espacial: , :

210 LET ay-INT (RND*21)+1 630 IF mf-0 THEN GOTO 300


220 IF ax>ll AND ax<21 AND ay> 110 PRINT AT 1Q,15:"4 1";AT 12 650 GOTO 300
6 AND ay<16 THEN GOTO 200 ,15;"3 2" 700 CLS PRINT FLASH li
:

490 PRINT INK 4 AT ay,ax;CHRS


, 120 PLOT 132.107: DRAW 25,-25: PAPER 2;AT 10,1;"BANG! Voce e
144 DRAW -25,-25: DRAW -25,25: ata 3ein proteção " !

DRAW 25,25
130 PLOT 107.82: DRAW 50,0: Toda esta seção do programa, como
PLOT 132,57: DRAW 0,50 você pode ver a partir da linha 650, é
As linhas 20 e 800 definem a nave e
seu míssil (que ainda não é visível). Elas Por enquanto, a estação espacial ain- um laço que o computador percorre di-
utilizam a técnica de colocar em uma da parece bastante primitiva. Se você versas vezes sempre que a nave inimiga
área de memória RAM
uma série de blo- quiser projetar e entrar uma mais ade- aparece.
cos gráficos elementares, definidos den- quada ou mais bonita, precisará apenas A
linha 150 descreve todo o cenário:
tro das declarações DATA. Essa área é de duas adições ao programa: não existe nenhum míssil vindo em sua
chamada de área de
gráficos definiveis - Uma linha extra parecida com a direção (até agora...).
peio usuário (ou UDG, abreviatura em linha 20, mas que comece com USR "c" A linha 3 10 decide sc a nave lançará
inglês da expressão user = defined- e que continue por tantas leiras do al- um míssil em sua direção, dentro dessa
graphics). Os comandos USR "a" e fabeto quanto o tamanho de sua esta- repetição do laço (existe uma chance em
USR "b" para o laço
definem, ção espacial necessitar. nove de que irá disparar).
FOR. ..NEXT, os endereços inicial e fi- - Um conjunto de declarações DA- Se houver um míssil, a linha 320 o co-
nal dessa área. Os comandos POKE fa- TA em uma ou mais linhas extras no fi- locará na posição inicial (my, mx), no
es5c trabalho. nal do programa, listando os códigos lugar mais óbvio —
ou seja, no lugar em
gráficos que compõem a nova estação que a nave E.T. se encontra no momen-
espacial na tela do computador. to (ax, ay). A pane do meio da linha 400
imprime o míssil, usando o caractere
gráfico CHRS 145 (correspondente á te-
cla B).
O trecho do programa a partir da me-
A próxima tarefa é imprimir na tela tade da linha 320 até a linha 400 é um
o míssil da nave E.T. e traçar sua traje- pouco "manhoso". O que ele faz é to-
tória em direção à estação espacial. mar as coordenadas do ponto médio da
estação espacial e as coordenadas refe-
rentes á posição atual da nave e subtrair
estas das primeiras, de modo a disparar
o míssil na direção exata da estação es-
pacial (numa reta passando por dois
pontos).
Como alguns dos números envolvi-
dos nesses cálculos podem ser negativos
(em movimentos para a esquerda e pa-
ra baixo) e outros positivos (em movi-

As linhas 200 e 210 c


espacial em uma posição aleatói
la, e a linha 490 a imprime. (O PRINT
CHRS 144 nessa linha mostra o carac-
tere gráfico associado à tecla A).
Alinha 220 pode parecer estranha
nesse estágio mas, à medida que o pro-
grama progredir, você verá que esta é
uma maneira de impedir que a nave ini-
miga apareça inesperadamente no meio
de sua estação espacial, trazendo pâni-
co e destruição.
No momento, você pode sentir von-
. : ) '

IIIIIIIIIIHI PROGRAMAÇÃO DE JOGOS 5

mentos para a direita e para cima), vo- Finalmente, depois de mais ou menos "X/t (127-AX)*(127-AX)+(95-AY)*(
como o pro-
cê vai achar difícil entender dez repetições do laço. a linha 620 apa- 95-AY) )
32 LET PW-250
grama funciona, caso não compreenda ga a nave inimiga de sua posição e co-
50 FOR 1-0 TO 7
o que são ABS e SGN, que foram defi- meça tudo de novo na linha 200.
55 READ A LET AS-AS+CHRS (A)
:

nidos no capitulo anterior. Mas eis aqui 59 NEXT I


algumas dicas para esclarecer o assun- 60 SPRITES(1)-AS
CONSTRUA AS 8LINDAGENS
to: 61 PUT SPRITE 1 (8,0) .

A segunda metade da linha 320 de- 65 GOTO 65


duz a posição atual do míssil (my, mx) As linhas seguintes constroem as blin- 250 DATA 24.126.90.126.126.195.
do ponto central da estação espacial (po- dagens destinadas a bloquear o avanço 129,129
sição na tela II, 16) e chama as coorde- do míssil.

nadas resultantes (fy e fx), 140 PLOT INVERSE 1:132,122 Digitando e executando esse progra-
As linhas 330 e 350, utilizando ABS 500 DIM a(4) ma, você verá a nave espacial extrater-
e SGN, acrescentam um fator de corre- 510 LET a$-INKEYS: IF aS-"" restre aparecer na tela.
ção de trajetória (sy, s.x) para fy e fx. THEN GOTO 600 A linha 10 serve apenas pura jj

A linha 400 começa imprimindo um es- 520 IF aS-"l" THEN LET a{l)-l duzir o gerador de números '

paço em branco sobre a posição ante- 530 IF aS-"2" THEN LET a(2)"l usando o conteúdo do n
rior do míssil. Em seguida, soma-se sx
540 IF aS-"3" THEN LET a(3)-l (TIME).
550 IF a$-"4" THEN LET a(4)-l A linha 30
e sy às coordenadas da posição anterior, i

560 LET fu-fU-1


de modo a preparar a parte restante da 600 DRAW INK a{l)M, INVERSE uma palavra dHl
linha 400 para imprimir o míssil em sua l-a(l) ,40,-40: DRAW INK a{2)*
nova posição, apenas um passo distan- 4. INVERSE 1-a (2) -40 -40 ,
,

te da anterior. DRAW INK a(3)*4. INVERSE l~a(


3). -40. 40: DRAW INK a(4)*4,
INVERSE l-a{4) ,40,40
640 IF ATTR [my,mx)-68 THEN
PRINT AT my.mx;" ": LET mf-0
Agora que a nave inimiga já dispa-
rou seu míssil, é hora de fazê-la mover- À primeira vista também existe
se; acrescente essas linhas: ma coisa estranha com essas
Quatro blindagens, mas apenas
420 LET xx-ax: LET yy-ay: LET sição PLOTpara traçar as li
m-INT (RNDM) De fato, o programa utiliz^
430 IF UI-0 AND ax<31 THEN LET traço (INK), que é a mesma <"
xx-ax+1 (PAPER), para traçar um L
440 IF m-1 AND ax>0 THEN LET mente quando você pressiot
xx-ax-1
450 IF m-2 AND ay<21 THEN LET teclasnumeradas de l a 4,
yy-ay+1 losango mudará de cor e
460 IF m-3 AND ay>l THEN LET tela. A linha 640 utiliza o A"

yy-ay-1 número da cor das blindag


470 IF xx>ll AND xx<21 AND yy> repelir o míssil, se ele acert;
6 AND yy<16 THEN GOTO 490 gem, apagando-o da tela.
480 PHINT AT ay.ax;" " LET ax :

-xx LET ay-yy


:

Em primeiro lugar o Spectrum deci-


dirá em que direção a nave E.T. se mo- As linhas restantes são muito fáceis
vimentará. Uma vez que isso seja feito, de se compreender. Elas estabelecem o
por um número aleatório na linha 420, suprimento do combustível na linha 100
os objetivos das linhas 430 a 460 tomam- e o fazem desaparecer até que, no meio significa DEFme a Futocuon, ou seja,
se óbvios. Estas são as linhas convencio- da linha 5!0 (já modificada), as blinda- definição de função. Se você precisar
nais de animação gráfica. A linha 470 gens tornam-se inativas. Lembre-se de utilizar com frequência uma longa ex-
mantém a nave fora da estação. linha A reintegrar a linha 10. pressão matemática no programa, a fun-
400 (inserida anteriormente) registra um ção predefinida o poupará de digitá-la
impacto, direcionando o programa pa-
100 PRINT PAPER 2: INK 6;AT 0
diversas vezes, em diferentes pontos do
,0;" COMBUSTÍVEL "
ra a linha 700, caso o míssil atinja o meio programa. Ela funciona, portanto, co-
160 LET fu-100
da estação. Se você não sabe por que es- 510 LET a$-INKEY$: IF aS-"" mo uma espécie de sub-rotina em uma
sa linha usa IF my> 10 AND my< 12, THEN GOTO 600 linha só. A expressão matemática na li-
ao invés de um 11 (mais simples) e IF 560 LET fu-fU-l nha 30 é chamada de FNZ e será utili-
mx> 15 AND mx<17, em vez de 16, 610 PRINT PAPER 3; INK 7;AT 0 zada mais tarde no programa para mo-
basta lembrar-se do seguinte: embora o .13;" ";Cu: p " vimentar um míssil em sentido diagonal
computador imprima a nave extraterres- na tela. A linha 32 estabelece na tela a
tre em uma posição com coordenadas in posição final de um indicador de com-
(eiras, os números calculados a cada pas- bustível (variável PW).
so do movimento são uma série de fra- 10 R-HND(-TIME) As linhas 50 a 61 desenham a nave
cções decimais. Assim, torna-se remota a 15 SCREEN 2.0 E.T. na tela, lendo os códigos gráficos
lehance de eles tornarem-se 11 e 16. 30 DEF FN Z(X)-SGN{X)*SQR(V*V*X. correspondentes através de instruções
IIIIIIIIIIIHMP nOGDAMACÁODÍJOGOSWMMBMnUmltiW
READ e DATA na linha 250, e 70 FOR J-0 to 7 ra traçar retàngulos. Usamos a instru-
colocando-os na página de video, no 75 READ B LET BS-BS+CHRS (B)
: ção LINE para traçar uma linha no al-
canio superior esquerdo da tela, com o
79 NEXT J to da tela, indo da posição extrema es-
80 SPRITES(0)-BS querda (coordenadas 30, 1 ) até a posição
comando PUT SPRITE. A linha 60 81 PUT SPRITE 0, (16,13)
usa a função SPRITE para definir es- atual do combustível (assinalada pela
85 GOTO 85 variável PW). O número 10 diz ao MSX
te padrão gráfico e armazená-lo no 260 DATA 0,0.0,8,28.62,28,8
"sprite" número 1 (por enquanto, não para traçar essa linha em cor branca. BF
explicaremos detalhadamente o que é O míssil que será lançado pelo E.T. é uma abreviação para box fill e preen-
é lido em um conjunto de códigos em che o retângulo com a cor utilizada pe-
DATA e definido como o sprite núme- la linha original. Se você quer traçar um
ro 0, nas linhas 70 a 80. O comando retângulo vazio, utilize B ao invés de
PUT coloca-o no canto superior esquer- BF.
do da tela para você ver, na linha 81. Estão agora completos os gráficos de
Assim, as linhas 81 e 85 são temporá- alta resolução para o jogo. O resto do
programa está relacionado com o mo-
vimento do E.T. e do míssil e a ativa-
A ESTAÇÃO ESPACIAL ção das blindagens.

^Hniova as linhas 81 e 85 como ante-


^Kbientc, e acrescente essas linhas, exe-
aido em seguida o programa: Existem três sub-rotinas a serem
V AX-INT(RND(1)*200)-1:LET
SlNTlRND(l)*100)+5
acrescentadas ao programa. A primei-
ra diz respeito ao movimento da nave
Bt BCLE (127,95) 12. 15:DRAW . inimiga. Digite-a, mas não a rode ain-
^Rl2 95 Cl 5S4 8NUNLNDNH" da porque nada acontecerá.
HT GOTO
7 ,

115
;

1000 LET LX-AX LET LY-AY


Hn\ linha 90 escolhe uma posição alea- :

1010 IF INT(RNDI1)*10)-1 THEN L


^Ba para a nave E.T. A linha 110 de- ET AX-RND (1) "248-1 LET AY-INT(R
:

Bpnha a estação espacial, que é simples- ND(l)*176)+5


Kenie um circulo (comando CIRCLE). 1020 LET AX-AX+INT(RND(l>«15)-8
ÇÕ comando DRAW, no final dessa li- :LET AY-AY+INT(RND(l)"15)-8
:

nha, traça uma cruz bem no meio da es- 1030 IF AX>103 AND AX<144 AND A
tação espacial. Como foi dito anterior- Y>71 AND AY<112 THEN LET AX-LX:
mente, o comando pode ser DRAW LET AY-LY
1040 IF AX<0 THEN LET AX— AX
imaginado como uma sucessão de decla-
1050 IF AX>248 THEN LET AX-497-
rações LINE. Uma explicação mais de- AX
talhada será encontrada em outra lição,
mais adiante.
A linha 1 15 é temporária.

0 INDICADOR DE COMBUSTÍVEL
A nave E.T. é controlada de forma
Remova a linha 115 do mesmo mo- semelhante à base de mísseis na lição das
do que removeu as linhas 61, 65, 81 e páginas 28 a 33. (Apontar.. .Fogo!). A
85. Acrescente essas linhas e aparecerão linha 1000 iguala as coordenadas da úl-
na leia maiores detalhes gráficos. tima posição da nave às coordenadas da
um sprite: veja M1CRODICAS na pá- posição atual, antes que ela seja movi-
120 DRAW *BM 131,87: 54D5BD6BR3B
gina 108). A linha 61 é temporária, pois D4USG4R3BDBL12R3U2NL3U2NL3BU10B mentada.
apenas mostra o resultado do SPRITE, L3H3D2L3D2R3" A linha 1010 escolhe um número ao
130 DRAW "BM5 1 L4D2NB4D2BE4BR2 acaso, provocando uma brusca mudan-
'
sendo retirada depois. , ;

A linha 65 também é temporária. Tu- D4R3U4BR5L3D2NR3D2R3BE4D4R3" ça de posição da nave inimiga na tela


140 LIME (30,1)- (PW.5) , 10, BF ("hiperespaço"). Se esse número alea-
do o que ela faz é manter a tela "con-
145 GOTO 145 tório for 1 (ou seja, em 10% das vezes,
gelada", de modo que se possa ver o re-
j
sultado do processamento feito pelas li- A
linha 120 traça um número na es- em média), o E.T. saltará para uma no-
nhãs anteriores. Ela será removida mais tação espacial, que corresponde ao nú va posição na tela. Se for diferente de
i

mero de blindagens. Na linha 130 mos I, será escolhida uma nova posição pa-
' tarde, quando o resto do jogo for acres-
centado ao programa. iramos a palavra FUEL (combustível). ra a nave, distante entre -7 e + 7 pontos
j
Infelizmente o MSX
não consegue escre- na direção X (da esquerda para a direi-
ver caracteres normais numa leia gráfi- ta), e entre -7 e + 7 pontos na tela, na

ca de alta resolução; por isso letras e nú- direção Y (acima e abaixo) — veja a li-

Agora remova as linhas 61 e 65, di- meros devem ser literalmente "desenha- nha 1020. A linha 1030 impede que a na-
gitando os números 65, seguido de dos" com comandos DRAW. ve E.T. superponha-se ao desenho da es-
< ENTER > , e 61. Também seguido de A linha 140 exibe o indicador cheio tação espacial, enquanto as linhas 1040
< ENTER > . Acrescente depois essas li- de combustível para as blindagens. Es- a 1070 impedem que ela saia para fora
nhas e rode o programa. sa linha emprega um método rápido pa- da tela.
2 ! . ,

IIIIHI í PROGRAMAÇÃO DC JOGOS 5 ]H|||||||||||

A nave invasoracolocada na nova


é não o míssil. Sendo positivo (isto é, se ficar se ablindagem correta estava po-
posição pela linha 1080. A linha 1100 o disparo ocorrer), então ela estabele- sicionada. Se não for encontrada nenhu-
faz retornar a sub-rotina. cerá a posição do míssil na tela e deter- ma blindagem no caminho do foguete,
á a blindagem que irá bloqueá-lo. o programa limpará a tela e terminará
com a mensagem: '"BANG! ... SUA
2000 IF INT(RND(1)*7)<>1 THEN H BLINDAGEM ESTAVA DESLIGA-
ETURN DA".
A próxima sub-rotina serve para de- 2010 LET v-INT<RNDU>*8)+5 Se o míssil ainda não atingiu o pon-
cidir, em primeiro lugar, se dispara ou 2015 LET DX-FNZ(127-AX) rLET DY" to esperado para as blindagens da esta-
FNZ(95"AY) ção espacial, então a linha 3050 o colo-
2020 IF DXOQ AND DY>-0 THEN LE caem nova posição com o comando
T MA-l:GOTO 2050 PUT.
2030 IF DX<-0 AND DYO0 THEN LE A linha 3040 finaliza a rotina. Final-
T KA-4:G0T0 2050
mente, as seguintes linhas completam o
2040 IF DX>- 0 AND DYX-0 THEN LE
T MA- 3 ELSE MA- nosso programa:
2050 LET MX-AX:LET MY-AY
2060 PUT SPRITE O.(HX.MY) 160 IF AF-0 THEN GOSUB 2000 ELS
2070 LET AF-1 RETURN :
E GOSUB 3010
170 GOSUB 1000
um 160 FOR J-l TO 4
A linha 2000 decide se dispara
190 KS-INKEYS:IF KS-"" THEN KS-
míssil. Existem chances
seis em uma de
O QUE É UM SPRITE? que ele seja disparado; mas, se já háum 195 LET PE-ASC<KS)-48
Um sprite é um tipo de caractere de míssil na tela, o programa não pode lan- 200 IF PE-J THEN SH(J)-1 ELSE S
alta resolução gráfica definido peto çar ouiro. Se um foguete não puder ser H(J)-0
usuário. Ele é utilizado para acrescen- disparado, a sub-rotina terminará. 201 IF SHtJKM THEN LET SH(J>-
tarmovimento aos gráficos de alta re A linha 2010 estabelece a extensão de 0
solução do MSX.
O uso do sprite fornece um aspecto
deslocamento do míssil na tela você— 205 CTRCLE(127,95) 18 15*SH (J)
. .

pode pensar em V como se fosse a sua 6.2*(J-l)/4.6.2MJ)/4


continuo ao movimento de figuras na 210 IFSHÍJ)-1 THEN LET PW-PW-2
tela. Esse movimento pode ser facil- velocidade. O conteúdo de V é passado
mente programado ponto por ponto, para a função FNZ —
definida na linha
220 NEXT
230 LINE (PW,1)-<PU,5> .0.BF
como se o objeto que se move fosse 30 — de modo a calcular a nova posi- 240 GOTO 160
apenas um caractere. Além disso, um ção do míssil na tela.
sprite pode ter até 16x1 6 pontos de al- As linhas 2020 a 2040 investigam o Antes de rodar o programa, remova as
ta resolução, enquanto um caractere ponto em que o míssil está na tela e tam- linhas 115 e 145. Agora que a linha 145
comum tem 8x8 pontos. O contorno ou bém que blindagem será necessária pa- foi removida, você não verá o que está
a forma do caractere ou do sprite é
finido por pontos "acesos" que as
ra bloqueá-lo — MA
é o ângulo de des- se desenvolvendo na tela durante a de-
locamento do míssil. finição dos blocos gráficos. Após o pro-
mem a cor de frente, e por pontos "apa-
gados" que assumem a cor de fundo. A linha 2050 inicia a trajetória do grama ler sido rodado, ocorrerá uma
Í possível definir até 256 sprites pe míssil a partir da posição onde está a na- curta pausa, antes que uma exposição
quenos (8x8 pontos) e até 64 sprites ve inimiga. A linha 2060 coloca o míssil completa apareça na tela.
grandes (1 6x 1 61, com padrões diferen na tela antes de a linha 2070 definir a A linha 160 verifica se um míssil foi
tes. Todavia, só podem ser mostrados variável sinalizadora AF = I, que diz ao lançado. A equação AF = 0 indica que
quatro sprites diferentes na mesma li programa que um míssil foi disparado. nenhum míssil foi disparado, e o pro-
nha horizontal de alta resolução. Spri A sub-rotina termina. grama pula para a sub-rolina que se refe-
tes podem ser agrupados para formai
A sub-rotina final vai da linha 3010 re ao lançamento do míssil —
que come-
figuras maiores; podem ser sobrepôs
tos para obtermos efeitos tridimensio-
à 3080. Digite as linhas, mas observe que ça na linha 2000 —
ou pula para a sub-
nais; podem, ainda, ter seu tamanho novamente não acontecerá nada se vo- rotina que movimenta o míssil; esta co-
dobrado. Por outro lado, é possível sa cê rodá-las nesse estado. meça na linha 3010, Depois, a nave E.T.
ber quando dois sprites colidiram; tudo é movimentada. A linha 170 faz com
isso faz deles caracteres de alta i
3010 LET MX-MX+2*DX:LET MY-MY+2 que o programa salte para a sub-rotina
lução extremamente versáteis. *DY que tem início na linha 1000.
3020 IF HX>110 AND MX<140 AND M
Programar sprites é realmente mais
Y>79 AND MY<108 THEN GOTO 3050
A parte do programa das linhas 180
fácil que utilizar caracteres definidos pe-
3030 PUT SPRITE 0,(MX,MY) a 220 diz respeit á ativação das blin-
->

lo usuário (compatíveis com o Sinclair


3040 RETURN dagens. A linha 190 checa qual tecla es-
Spectrum) ou funções como PUT, GET tá sendo pressionada. Se a tecla for um
(compatíveis com o TRS-Color) e DRAW 3050 IF SH(HA)-0 THEN GOTO 3070
(compatíveis com o Apple III, principal- 3055 PUT SPRITE 0,(-l,-l) número de I a 4, a linha 2000 desenha-
mente quando se deseja uma animação 3060 LET AF-0: RETURN rá a blindagem; se alguma das blinda-
mais sofisticada. Não é necessário, por 3070 SCREEN 0 gens for acionada, a linha 210 diminui-
exemplo, seguir o rastro de um sprite, 3080 LOCATE 0,11:PRINT "BANG! rá o combustível.
- Sua blindagem estava deslioad
apagando as posições já ocupadas por A linha 230 traça um retângulo ne-
ele. Os sprites são compatíveis com ou- gro no final do indicador do combustí-
tros modos de utilização da tela do MSX:
texto em 32 colunas (SCREEN Demo-
A nova posição do míssil é compu- vel, dando a impressão de que o supri-
tada pela linha 3010. A linha 3020 che- mento de combustível está acabando, à
do multicor (SCREEN 3). Não se pode, medida que o valor em PW
diminui.
ca se o míssil já atingiu a blindagem. Se
contudo, utilizá-los em modo texto de
Finalmente, a linha 240 repete tudo
isso não aconlecer, o programa pula pa-
40 colunas (SCREEN 01.
ra a linha 3050, com o objetivo de veri- novamente, indo para a linha 160.
'IGODEMAQUIN lllllllll

COMUNIQUE-SECOM 0
MICROPROCESSADOR
OS REGISTROS INTERNOS
0 QUE É E 0 QUE FAZ OS SINALIZADORES
LOCALIZAÇÕES DE MEMORIA

Para entender a linguagem de máquina Uma das coisas mais importantes so- gam o microprocessador de oito bits de
bre os registros é que eles não possuem comprimento de palavra chamado Zilog
é necessário aprender primeiro como endereços. Isso faz com que eles se tor- Z-80A (este é o seu nome comercial). Já
funciona o microprocessador, que é, ao nem de utilização muito mais rápida. os micros da linha Apple II utilizam um
mesmo tempo, o coração e o cérebro microprocessador também de oito bits
mas inteiramente diferente, o 6502.
de um computador pessoal. OS REGISTROS INTERNOS A complicação para o futuro progra-
mador de linguagem de máquina come-
As diferentes linhas de computado- ça aqui: cada um dos diversos chips de
Como você já sabe, os computadores res pessoais utilizam, geralmente, micro- microprocessadores citados possui um
possuem memória. Mas eles não se limi- processadores de marcas diferentes. As- conjunto diferente de registros internos
tam a lembrar-se das coisas; na verda- sim, os micros das linhas Sinclair, e de instruções em código de máquina.
de, essas máquinas também são capazes TRS-80 e MSX, por exemplo, empre- Em geral, o que se aprende para um ti-
de manipular e processar aquilo que me-
morizam, através da unidade central de
processamento (UCP), que é formada
por um único circuito integrado (chip),
conhecido como microprocessador.
Esse circuito integrado é muito mais
complexo do que um circuito de memó-
ria. As memórias são dispositivos rela-
tivamente passivos, que armazenam pa-
drões binários e os desenvolvem. O mi-
croprocessador, entretanto, realiza fun-
ções bem mais "inteligentes'". Ele pode
adicionar, subtrair, movimentar infor-
mação de uma locação de memória pa-
ra outra, e deslocar e alternar seus pa-
drões de bits. A programação em lingua-
gem de máquina tem por objetivo "di-
zer" ao microprocessador (UCP) como
ele deve proceder para processar dados
e informações, executando uma grande
variedade de operações.

0 CÉREBRO DA MÁQUINA

Tudo que acontece no computador es-


tá literalmente sob controle direto do mi-
croprocessador. Verdadeiro "cérebro",
ou centro de controle da máquina, ele
efetua todas as operações aritméticas,
copia dados de uma locação de memó-
ria para outra, atribui funções para áreas
de memória e executa os programas. E
com o microprocessador que você está
se comunicando quando escreve seus
programas em código de máquina. Den-
tro dele existem inúmeras locações espe-
cializadas de memória, chamadas regis-
tros. Cada registro tem uma função es-
pecífica. E a seleção dos que serão utili-
zados depende inteiramente das instru-
ções que você fornece quando escreve o
seu código de máquina.
IIIIIIIIIHHHI 5 CÕO,OOD t MÃQU,HA 5

po de chip não se aplica para os outros. gistro sinalizador (o último bit à direita mória. Se ele for instruído para retirar
Felizmente, alguns dos registros têm na convenção normal de escrita), é o bit algo da pilha, começará sempre pelos
funções similares em todas as máquinas. de transporte ou sinalizador C (carry, itens mais altos. Isso significa que você
Os microprocessadores de oito bits pos- em inglês). Se a UCP efetuar uma adi- não precisa especificar a locação de me-
suem um registro chamado PC (Pro- ção, uma subtração, ou qualquer outra mória que lhe interessa, ou sua posição
gram Counter) de dezesseis bits: é o con- operação lógica ou aritmética que exija na pilha. Existe apenas uma locação do
tador de programa. Este armazena o en- um bit para ser emprestado ou transpor- topo de cada vez; assim, o microproces-
dereço do byte seguinte do código de tado (o "vai-um" das operações aritmé- sador não se confundirá.
máquina de um programa a ser execu- ticas), então o sinalizador C será esta- Mas você, o programador, pode fi-
tado. Ele "avisa" ao computador onde belecido em 1. car extremamente confuso, se não pres-
se encontra, dentro de um programa. E, Os outros bits indicam se o resulta- tar atenção! É importante lembrar-se de
assim que o byte do programa de códi- do de uma operação foi zero (o sinali- tudo o que existe em cada locação de
go de máquina é executado, o registro zador de zero) ou negativo (o sinaliza- memória da pilha, quando se estiver fa-
PC è aumentado de um. dor de sinal), ou ainda se um registro foi zendo um programa que a utiliza, e
Todos os microcomputadores de oi- excedido em capacidade porque o núme- que o dado desejado es-
certificar-se de
to bits também têm, pelo menos, um ou- ro era muito grande (o sinalizador de ex- tá no topo da pilha.
tro registro, chamado acumulador de oi- cesso, ou overflow). Esses sinalizadores Agora que você já domina o concei-
to bits ou registro A. E o registro utili- são comuns a todas as máquinas, em- to de pilha LIFO, podemos revelar-lhe
zado pela UCP para efetuar operações bora não estejam necessariamente na um segredo: em todas as máquinas ci-
aritméticas. Se você quiser, por exem- mesma posição no registro sinalizador. tadas aqui, a base da pilha é dirigida pa-
plo, acrescentar um número a
outro (ou Existem também sinalizadores específi- ra o topo da RAM. como resto da pi-
subtraí-lo dele), uma das duas parcelas cos para cada máquina. lha acumulado abaixo, item por item.
deverá estar no acumulador. Isso tam- Os sinalizadores são utilizados em Assim, na verdade, você introduz e tira
bém afeta a multiplicação e a divisão — instruções de desvio condicional em lin- coisas da parte inferior da pilha!
que são apenas combinações de opera- guagem de máquina —
o equivaiente em Isto quer dizer que, quando um novo
ções lógicas como as adições e as sub- BASIC ao IF...THEN. No programa item é introduzido, o indicador de pilha
traçõcs. em código de máquina, podemos escre- é diminuído, e, quando um item é tira-
Cada uma dessas máquinas possui ver instruções que farão com que a má- do, o indicador é aumentado.
também um par de registros de indexa- quina salte ou desvie se um sinalizador Apesar disso, o conceito de pilha se
ção. Nos microprocessadores Z-80A es- estiver em 0 ou em 1, por exemplo. mantém verdadeiro, com a base da pi-
tes são registros de dezesseis bits que lha fixada por uma variável de sistema,
contêm endereços. Tais endereços po- e os itens dos dados adicionados ou sub-
dem ser aumentados, diminuídos ou traídos a partir de um final livre, um de
modificados aritmeticamente no acumu- cada vez.
lador, de modo a fornecer outros ende- Comum a todos os computadores, o
reços. Os micros da linha Apple (micro- indicador da pilha (em inglês: stack-
processador 6502) possuem registros de pointer) é um registro desiinado a reter
indexação de oito bits cujos conteúdos o endereço de uma locação de memória
são incorporados a um endereço para RAM. Esse endereço marca o fim de Uma das funções mais comuns de
fornecerem um endereço adicional. uma área de memória, como todos os uma pilha é manter a UCP a par de seu
Conhecido como endereçamento in- indicadores fazem; mas, aqui, essa é uma lugar em um programa quando uma
dexado, esse tipo de operação é mais co- área especializada de memória, de uso sub-rotina for executada. Isso pode pa-
mumente utilizado para ler dados de exclusivo da UCP e conhecida como pi- recer simples, mas devemos nos lembrar
uma tabela, byte por byte. O programa lha. Ela é uma área de rápido acesso, de que uma sub-rotina pode chamar ou-
começa com o endereço do primeiro onde a informação pode ser temporaria- tra; esta, uma outra, e assim por dian-
byte da tabela e, a seguir, percorre seu mente armazenada e chamada de volta te. Quando o computador atinge uma
caminho aumentando o registro de in- sem precisar dos procedimentos normais instrução que lhe diz para saltar para
dexação deum em um. de endereçamento. uma sub-rotina, o conteúdo do conta-
A pilha da UCP funciona de modo pa- dor de programa nesse momento (isto
recido a uma pilha comum de papéis: to- é, onde o programa se encontra no ins-
da informação nova que se quer acrescen- tante em que a instrução de desvio ocor-
tar a ela deve ser colocada em seu topo. re) é copiado no topo da pilha.
O sinalizador (registro-bandeira, ou Inversamente, quando se quer tirar dela O
endereço inicial da sub-rotina é en-
flag-regisrer, em inglês, numa
ana- alguma coisa, é necessário começar pelo tão escrito no registro contador de pro-
logia à bandeira dos taxímetros) é ou- topo, retirando as folhas mais altas (não gama. À medida que cada instrução é
tro registro existente em todos os micro- vale tirar um papel do meio ou da pane executada em uma sub-rotina, o conta-
processadores de 8 bits. Um registro si- mais baixa da pilha). A regra é: o último dor de programa é incrementado da ma-
nalizador tem normalmente oito bits, a entrar é o primeiro a sair (em inglês: las! neira normal, até que atinja uma instru-
que podem estar "ligados" (bit 1), ou in, first out). Por isso, esse tipo de pilha ção de retorno. Então, o endereço que
"desligados" (bit 0), dependendo do re- é chamado de L1FO. Existem outras es- está no topo da pilha é retirado e colo-
sultado de certas operações. Cada bit de pécies como a pilha FIFO (first in, first cado de volta no registro contador de
um registro sinalizador é chamado de out), A fila de um supermercado é um programa. Esse processo permite que a
bandeira, ou sinalizador. exemplo de pilha FIFO... UCP reinicie a execução do programa
Todo sinalizador tem um significado Uma das funções do microprocessa- exatamente no ponto onde estava antes
I próprio. Por exemplo, o bit número 0, dor consiste em colocar dados, endere- de chamar a sub-rotina e passe a incre-
I ou seja, o bit menos significativo do re- ços ou códigos no topo da pilha da me- mentar o contador de programa nova-
IIIIIIIIIIMHHMHHBHBHHHIIIIIIIHII
s você pode comutá-los para desem-
mente. Isso explica por que, em progra-
mas BASIC, cada sub-rotina encaixada D! penharem simultaneamente duas opera-
ções. Contudo, nào é aconselhável ten-
dentro de uma outra deve estar conti-
da completamente naquela que a pre- O microprocessador dessas máquinas tar isso no ZX81. Se a máquina estiver
cede; do contrário, os endereços incor- é o Zilog Z80A, de oito bits. Ele tem ca- na modalidade SLOW (lenta) você po-
como o fato de derá perder o conteúdo da tela.
retos de partida seriam colocados no to- racterísticas exclusivas,
po da pilha.O mesmo acontece com os contar com um grande número de regis- O registro sinalizador F também pos-
tros internos (21, para ser exato). Estes sui oito bits. O bit na posição 0 é o si-
laços de repetição, tipo FOR...NEXT,
são também chamados de registros do nalizador de transporte C; o bic na po-
cujos endereços de retorno no progra-
usuário, porque podem ser controlados sição 1 é o sinalizador de subtração N,
ma são armazenados na pilha. Agora
que você domina os conceitos básicos diretamente pelo usuário ou pelo pro- o qual entra em ação apenas quando
gramador da máquina. operações codificadas em BCD (decimal
da programação de códigos de máqui-
na, descubra como eles se relacionam Existem dois acumuladores de oito codificado em binário — uma represen-
A e A'. Esses acumuladores não tação especial de números decimais em
ao microprocessador especifico de seu bits:
podem ser utilizados ao mesmo tempo, binário) são utilizadas; o bit 2 é o sina-
computador.

7T7T
IIIIIIIIIIIUBM^^^^MHUHHIIIIIIIIIi
lizador de paridade/excedente P/V; o xação de oito bits cada: X e Y. Estes tipo Motorola 6809E de oito bits, ope-
bit 4 é o sinalizador de meio transporte contêm deslocamentos (off-sets), que rando a uma frequência de 0,895 MHz.
H, que também é utilizado em BCD; o são acrescentados a um endereço-base Ele tem dois acumuladores: os registros
bit 6 é o sinalizador de 0 Z, e o bit 7 é para se obter outro endereço. Esse mé- A e B, que podem ser utilizados inde-
o sinalizador de sinal S. Existe um re- todo é muito utilizado para ler uma ta- pendentemente, como registros separa-
gistro sinalizador alternativo F' que é bela de dados, por exemplo. endere- O dos de oito bits, ou juntos, como um
comutado junto com A'. ço-base, no caso, é o início da área de acumulador D de dezesseis bits.
Existem seis registros de propósitos memória contendo uma tabela. Para ler Ele conta ainda com dois registros de
gerais — B, C, D, E, e L Hque tan-— a tabela, usamos um laço, que incremen- indexação de dezesseis bits —
XeY —
to podem ser utilizados separadamente, ta apenas o deslocamento a cada passa- que retêm os endereços que podem ser
como registros de oito bits, quanto em gem. Com isso, o programa é direcio- aumentados ou deslocados, por meio da
pares, como registros de dezesseis bits nado para o próximo byte de tabela, ca- adição ou subtração de números (conhe-
(neste caso, são chamados coletivamente da vez que o laço é repetido. cidos como "deslocamentos" ou off-
de registros BC, DE
e HL). Também É possível direcionar um programa sets),para fornecerem um outro ende-
existe um conjunto alternativo: B 'C\ em código de máquina para um endere- reço. Frequentemente, essa forma de
D 'E' e H
'L'. O HL
e os registros al- ço que contenha um outro endereço — programação é utilizada para ler uma ta-
ternativos H
'L' podem igualmente ser desde que este se encontre na página bela de dados a partir de um endereço-
utilizados como acumuladores de dezes- zero da RAM, pois os endereços base.
seis bits. Contudo, os registros H 'L' indiretos podem ter só oito bits de O registro de código de condição re-
devem seus valores anteriores
ter comprimento (isto limita em 255 o nú- tém os diversos bits sinalizadores. O bit
restaurados antes de retornarem para mero de memórias endereçáveis por es- 0 é o sinalizador de transporte C; o bit
BASIC. te método). Você pode deslocar um des- 1 é o sinalizador de excesso V; o bit 2
O indicador de pilha do Z-80 tem de- ses dois endereços, mas o registro X de- é o sinalizador de zero Z; o bit 3 é o si-
assim como os registros de
zesseis bits, ve ser utilizado para deslocar a partir do nalizador de sinal N; o bit 5 é o sinali-
indexação IX e IY, Estes últimos retêm primeiro endereço, e o registro Y zador de meio transporte, que é ativa-
endereços que podem ser aumentados deve deslocar a partir do segundo do apenas com operações aritméticas
ou deslocados por meio da adição ou endereço. com BCD (decimal codificado em biná-
subtração de números conhecidos como O registro processador P de oito bits. rio, que é uma representação especial de
"deslocamentos" (offsets), destinados também conhecido como registro de es- números decimais); o bit 4 é o sinaliza-
a fornecer um outro endereço. O 1Y lado (status-register), contém um sina- dor da máscara de interrupção normal
aponta para o centro das variáveis de lizador. Os sinalizadores de transporte I; o bit 6 é o sinalizador da máscara de

sistemas e é utilizado pelas rotinas ROM C são os mais importantes e ocupam o interrupção rápida F; e o bit 7 é o sina-
para indexá-las. Se o registro IY for bit 0; o sinalizador de 0 Z ocupa o bil lizador de total E — todos são utiliza-
acionado, seu valor original deverá ser I ; o sinalizador de excesso V ocupa o bit dos em rotinas de interrupção, que in-
restaurado mais tarde ou o computador 6; e o sinalizador de sinal N ocupa o terrompem, a intervalos regulares, o flu-
não funcionará. bit 7. xo normal do programa de código de
Existem mais dois registros de pro- Existem mais três sinalizadores que máquina para desempenharem funções
pósitos especiais no microprocessador você pode utilizar. O sinalizador de de- decisivas, como atualizar o cronometro
Z-80: o I e o R. O
registro I armazena cimal D, que é o bit 3, é estabelecido interno, fazer a varredura do teclado pa-
parte do endereço utilizado para iniciar quando o microprocessador efetua ope- ra ver se alguma tecla foi apertada
"rotinas interrompidas". São rotinas rações aritméticas em binário codifica- etc.
que interrompem o curso normal do seu do em decimal (BCD). O sinalizador de O chip 6809 possui ainda um regis-
programa de código de máquina a cada pausa B e o sinalizador de interrupção tro de página direta — ou DP —
de oi-
1/50 de segundo, para desempenhar al- I são utilizados em "rotinas de interrup- to bits. A função desse registro é arma-
guma função vital tal como a varredu- ção". Estas interrompem, a intervalos zenar o byte mais significativo dos en-
ra do teclado. regulares, o fluxo normal dos seus pro- dereços que você escolheu para a pági-
O registro R renova a memória dinâ- gramas em código de máquina para de- na direta, de modo que a locação nessa
mica (re/reshj, mas você não poderá sempenharem funções vitais, como a página possa ser endereçada apenas pe-
utilizá-lo no Spectrum ou no ZX-81. varredura do teclado. lo seu byte menos significativo.
A parte inferior da pilha está no RAM- O 6502 também tem uma pilha que São dois os indicadores de pilha, de
TOP (locação máxima da memória RAM está limitada à página 1, com sua base dezesseis bits cada: Se U. O primeiro
em um microcomputador) e pode ocupar em S01FF, pois o indicador de pilha, ou revela o último endereço completo no
uma área tão grande da RAM quanto se- registro SP, tem apenas 8 bits. Esse in- hardware da pilha cuja base está em
ja necessário. O
indicador de pilha, ou dicador pode conter qualquer número RAMTOP ou &H7FFF (a menos que
registro SP, possui dezesseis bits; assim, de $00 a SFF e fornece o byte menos sig- tenha sido empurrado para baixo, de
elearmazena todo o endereço do último nificativo do primeiro endereço livre lo- modo a deixar espaço a um programa
byte ocupado da pilha. calizado abaixo da pilha. O micropro- em código de máquina). O indicador U,
cessador já sabe que o bit mais signifi- por sua vez, é utilizado com a pilha do
cativo do endereço é 01 pois a pilha es-
,
usuário, cuja base deve ser normalmente
tá na página 1. definida pelo programador. A
pilha do
usuário é pouco utilizada; assim, o re-
Os micros da linha Apple II, bem co- gistro U serve como um registro extra
mo o TK-2000, utilizam o microproces- de indexação de dezesseis bits pelos có-
sador 6502. digos de máquinas mais sofisticados no
IEsse chip possui um único acumula- O microprocessador existente nos TRS-Color ou pelo programador de lin-
dor de oito bits e dois registros de inde- computadores da linha TRS-Color é do guagem Assembly.
IIIIIIIIIIIHH llllllllll
— TRIÂNGULOS E CÍRCULOS
USE FLASH PARA ANIMAR
UTILIZEOS COMANDOS PROGRAMAS NO SPECTRUM
GRÁFICOS DO BASIC E NO MSX
GRÁFICOS NO APPLE

acrescente cor onde e como desejar, etc. das, por um computador.


Alguns comandos simples e muita
Em pouco tempo você estará fazendo É claro que os computadores utiliza-
imaginação: isso é tudo que você desenhos realmentte complicados. dos para esses tipos de imagem sofisti-
precisa para produzir imagens Os gráficos para computador evoluí- cada são muito maiores do que o mo-
ram muito nos últimos anos e atualmen- desto micro que você tem em casa. Mas
sensacionais na tela do computador.
te são utilizados em muitos tipos de apli- existe uma quantidade impressionante
Veja aqui por onde começar. de coisas que você pode fazer em sua
cações. Gráficos e tabelas constituem
um exemplo óbvio, mas você também maquininha doméstica.
já deve ter notado o aumento no núme- A maioria dos micros entende co-
ro de imagens geradas por computado- mandos simples, tais como PLOT,
Ligue um aparelho de TV ou um mo-
nitorde vídeo ao seu computador e a le- res em propagandas de TV, revistas e até DRAW, PAINT e INK. Para usá-los
mesmo em efeitos especiais de filmes. com eficiência e facilidade, contudo, é
linha ficará à sua disposição. Pratica-
Na verdade, muitas das ilustrações de preciso compreender bem como a tela
mente lodos os microcomputadores pes-
1NPUT foram produzidas ou modifica- gráfica do computador é organizada.
soais permitem que você desenhe nela,
IIIIIIIIIIIHI
Praticamente todos os computadores no sentido horizontal e 176 no sentido PLOT. Tente essas retas em ordem, sem
com capacidade gráfica de alta resolu- vertical limpar a tela entre elas:
ção utilizam a mesma forma de organi- Os pixels são numerados de uma ma-
zação da tela. Esta é dividida em um neira aparentemente estranha à primei-
conjunto de elementos individuais de ra vista. Se você já utilizou as declara-
imagem chamados pixels (termo que de- ções PRINT ATantes, sabe que: Se você não fornecer uma nova coor-
riva da abreviatura da expressão ingle- denada na leia, por intermédio do co-
PRINT AT 10,15 ...
sa picture element).Cada pixel é um pe- mando PLOT (que pula para ela, sem
queno retângulo na tela, que pode ser significa que o que deve ser impresso se- desenhar nada), o computador conti-
'"ligado" ou "desligado" individual- rá colocado na tela em uma posição de- nuará a desenhar a partir da última po-
mente, por diferentes comandos. Os pi- finida por 10 linhas, contadas a partir sição, ou seja, do ponto final da úitima
xels são dispostos em uma espécie de do alto da tela, e 15 colunas, contadas reta traçada (que é onde está o cursor
matriz retangular, como um sistema de a partir da borda esquerda. gráfico). Para comprovar isso, adicio-
coordenadas, e cada um deles tem um Entretanto, quando você emprega a ne as seguintes retas, uma de cada vez,
"endereço", que geralmente é um par instrução PLOT para acender um pixel, às duas que você acabou de desenhar:
de números: sua posição na tela em re- o primeiro parâmetro do comando for-
nece a distância a partir da margem es-
DRAW 0 50 ,

lação ao eixo horizontal e ao vertical.


DRAW -50,0
O número de pixels na tela define o querda do vídeo, e o segundo define a DRAW 0,50
seu grau de resolução gráfica. Em al- distância para cima, a partir do lado in-
guns computadores, você pode escolher ferior da tela. Esse método, aparente- Como você pode observar, é neces-
entre desenhos de alta resolução com mente em conflito com o anterior, se- sário empregar números positivos para
poucos "pixels" e linhas finas, ou de- gue a convenção adotada para o siste- desenhar para cima ou para a direita e
senhos de baixa resolução, com pixels ma de coordenadas ortogonais (cartesia- números negativos para desenhar para
maiores e linhas grossas. Muitos com- nas). Assim, por exemplo, 0 comando baixo ou para a esquerda.
outadores permitem lambem que você Para traçar uma reta inclinada, você
Btelecione a cor que o pixel terá na tela
PLOT 10,15 deve seguir a mesma regra: primeiro, es-
ao ser iluminado. diz ao compulador para colocar um si- tabeleça quantas posições para a direi-
Assim, desenhar na tela é apenas uma nal na tela distante 10 pixels da margem ta ou para a esquerda o cursor gráfico
questão de dizer ao compulador quais esquerda e 15 linhas contadas de baixo deve se movimentar, depois quantas po-
pixels devem ser acendidos. Em poucos para cima. Equivale, portanto, a X = 10 sições para cima ou para baixo. Por
minutos, experimentando os comandos e Y = 15. Se você fizer a experiência ve- exemplo, acrescente essa reta àquelas já
gráficos mais .simples, você esiará fazen- rá o ponto aparecer na parte inferior es- traçadas acima:
do belos desenhos sozinho querda da leia. As posições horizontais
Alguns micros, como os compatíveis são numeradas de 0 a 255, e as verticais, DRAW 50,50
com o ZX-S1 têm uma capacidade grá-
, de 0 a 175. Para sentir melhor como
fica relativamente limitada, pois seus kfunciona a numeração das posições de
tela. tente digitar essas linhas, uma de
CONSTRUA UM PROGRAMA
programas exploram a utilização de dois
comando ;, apenas:
1
o PLOT. que sim- cada e/ \ :

plesmente acende um ponto na tela, e o te aqui um programa mais interes-

UNPLOT, euearreeado de apagá-lo. PLOT O.o !íte, utilizando o comando DRAW.

Além disso, a resolução gráfica da tela PLOT 0.1 /i Para que você possa ver o que está acon-
é bastante pequena. No entanto, esses^ PLOT 255,0 .çcendo, entre e execute as linhas dos
micros podem ser equipados, opcior PLOT 255.175 tramas abaixo:
mente, com uma placa ou um i

pTb ink 2
para gráficos de alta resoluçj Os quatro pcwuos vistos agora na tela
marcam oslimkesda área na qual se pode 20 PLOT 0,175
Já os microcomputador^
30 LET t-255: LET r--175;
TRS-Color. Apple 11, Sinclair Spectrum desenhar alguma coisa. Tudoo que esti-
LET b--255: LET 1-169
e MSX dispõem de recursos bastante so- fora desses limites cairá numa parte da
40 DRAW t,0: DRAW O.r: DRAW b
fisticados pata desenhar em alta re- nhecida como moldura ou borda ,0 DRAW 0
: ,

solução. IJ (veja mais adiante). Você po-


Além disso, os micros mais moder- de usar, nestecaso, o comando PLOT com Se você digitou o programa correta-
nos contam com comandos gráficos adi- todas as cores disponíveis no Spectrum. mente não cometeu
(e erros, como uti-

cionais que permitem criar figuras geo- lizaro número 1 no lugar do L minús-
métricas, como círculos e retàngulos, e culo,ou vice-versa), obterá um retângu-
pintá-las com cores diversas. COMO DESENHAR RETAS lo sem um dos lados. Em seguida, adi-
Para esses computadores, existe o cione ao programa as linhas abaixo:
conceito de cursor gráfico, ou seja, um O comando DRAW do Spectrum faz
exatamente o que você espera: 50 LET t-t-6
ponto imaginário na tela que indica as ele dese-
60 LET r-r+12: LET b-b+12:
coordenadas finais do último ponto ou nha uma linha reta.
LET 1-1-12 ^^^^^^
reta traçados. Antes, porém, o computador lem que 70 DRAW t,0: DRAW O.r: DRAW b
saber onde começar a desenhá-la, qual ,0: DRAW 0,1
será o seu comprimento, e em que dire-
ção você quer orientá-la. Ao executar o programa, você nota-
Para iniciar a reta, você pode utili- rá que agora apareceu um outro retân-
IA imagem de
Spectrum produz na
alta resolução
tela é
que o
de 256 pixels
zar uma posição qualquer na tela, con-
forme foi definido para o comando
gulo menor, dentro do primeiro. Acres-
cente então o resto do programa:
IIIIIIIIHHHH llllllllll
80 LET t=t-6
COMO DESENHAR CÍRCULOS
90 GOTO 50
A declaração CIRCLE do Spec-
Veja o que acontece: cada vez que o trum também se comporta de modo pre-
seuprograma execuia o laço entre as li- visível: ela desenha um círculo.
nhas 50 e 90, deduz 12 de cada um dos É necessário não esquecer que os pri-
números positivos. A variável
(topo), t
meiros dois números após uma declara-
por exemplo, diminui 255 para 243, de- ção CIRCLE definem as coordenadas
pois para 231... para 219... e assim por do centro do circulo —
o qual não é tra-
diante. Eventualmente, ele vai aquém do
— çado —enquanto o terceiro número
,

zero e se torna um número negativo fornece o seu raio em pixels. Assim a


assim, a reta que está sendo controlada Unha:
pelo laço muda de direção. Do mesmo
CIRCLE 127,87,50
modo, as variáveis inicialmente negati- Fig. 2: A ca.sa em perspectiva.
vas (tais como b, para baixo) podem ...desenha um circulo de 100 pixels de
tornar-se positivas e também mudar de diâmetro (50 de raio) no meio da tela
direção. Mas a cada "viagem" do laço a li- (posição x= 127 e y= 87),
Para observar mais de perto esse pro- nha 20 acrescenta 3 à variável h, que re- No programa da casa, por exemplo,
cesso, rode novamente o programa com presenta a altura da posição PLOT. As- você pode "instalar" uma janela redon-
a seguinte adição: sim, o início de cada linha será três pi- da na porta da frente, utilizando a de-
xels mais alto que o da anterior. claração CIRCLE.
85 PAUSE 100 Acrescente as próximas linhas e sua Se você seguir um CIRCLE com uma
casa passará a ter a maior parte do declaração DRAW, a linha que você de-
LUZ E SOMBRA telhado: senhar começará a partir do ponto on-
de o circulo termina.
70 LET r-100
O
Spectrum não lem a declaração
80 FOR D-140 TO 150
COLOR, usada para colorir Fácil e ra- 90 PLOT r.P
pidamente uma área de fundo. CORES NO SPECTRUM
100 DRAW 69.-44
Todavia, você pode "sombrear" o 110 LET r-r+2
desenho, utilizando uma série de retas 120 NEXT P Spectrum tem uma gama de oito
O
paralelas de uma só cor. Mas, como ca- cores, identificadas por rótulos acima
da nova reta precisa ter seu próprio co- Existem aqui duas variáveis, per. Is- das teclas numéricas de 0 a 7, que são
mando PLOT, os programas tendem a so se deve a que as posições PLOT utilizadas para chamá-las quando isso se

se (ornar demasiado lentos. movimentam-se não apenas para cima faz necessário. O comando BORDF.R
Um modo de se coniornar essa difi- mas também para a direita. (bordas) controla a área externa da te-
culdade é utilizar um laço FOR...NEXT: Observe a utilização de números ne- la, sobre a qual você não pode desenhar

o programa seguinte desenha a parede gativos na linha 100 para fazer o decli- nem imprimir nada.
direita de uma casa (figura 2): ve do telhado para baixo. As próximas Os outros comandos de cores podem
linhas completam o contorno da casa: ser utilizados de duas maneiras bem di-
20 FOR h-56 TO 100 STEP 3 versas. Se você rodar um programa
30 PLOT 160, 130 PLOT 100,140 com, por exemplo,
40 DRAW 23,12 140 DRAW -60,-40
50 NEXT h 150 PLOT 46,103 10 BORDER 2:PAPER 2:INK 7
60 PLOT 183,110 DRAW 0,-9/ 160 DRAW 0,-96
tudo o que se seguir no programa, de-
:

: DRAW -23,-13: DRAW 0.100 170 DRAW 113,-7


pois que essa linha for executada, será
Como isso funciona? Cada vez que Agora você pode terminar a casa, impresso em branco (1NK 7), sobre uma
o laço é executado, o programa desenha uma porta, as janelas e uma chaminé tela de fundo vermelho (PAPFR 21

uma linha de 23 pixels, inclinando-a de com D auxílio dos comandos PLOT e Tal situação só será alterada quando
12 pixels, da esquerda para a direita. A DRAW. Se você decidir copiar a casa você substituir essa linha por outra que
cada nova linha, ele inicia 160 pixels à que aparece na figura 1, eis aqui algu- modifique os comandos de cor. Note
esquerda. mas sugestões: que a moldura é da mesma cor que o
O triângulo do revestimento abaixo fundo da tela (BORDER 21. mas
do telhado requer três variáveis. A pri- você poderia ter especificado outra cor
meira define a altura onde cada linha co- para ela. Até mesmo as listagens dos
meça. Asegunda controla a distância, programas aparecerão nas cores indica-
à direita, de onde ela parte. A terceira, das, o que pode dificultar a sua leitura.
finalmente, determina o comprimento Se, por outro lado, você iniciar com:
da linha.
10 PRINT PAPER 2:INK 7 : AT
As janelas do andar superior são tra- 15,10; ""
çadas sobre o revestimento, depois que
este é desenhado. Para fazer isso, você então, apenas a pequena área da tela on-
precisará jogar espaços em branco, de o asterisco entre aspas aparece fica-
usando o PRINT AT, nos pontos ade- rá vermelha.
quados. Em seguida, trace o contorno Observe que no primeiro exemplo as
das janelas, utilizando PLOT e DRAW declarações de cor são seguidas por dois H
1
Fig. 1: Um padrão de gráfico para <i Spectrum. da maneira usual. pontos, ao passo que no segundo exem-
"

mu IHIIIIIIIIIII
pio cada uma delas é separada por um gráfico na tela. Como ele recomeça ca- alta resolução (que tem 280 pixels na di-
ponto e virgula. da vez que vai para a linha 70, você de- reção horizontal e 192 na direção verti-
Você pode incorporar essas declara- verá pressionar a tecla <BREAK> cal, com seis cores). O
comando para li-
ções de cor a qualquer linha do progra- quando quiser parar: gar a tela gráfica de baixa resolução é
ma, utilizando PLOT, DRAW ou CIR- 10 LET X-INT (RND*32)
o GR; e, para a tela de alta resolução,
CLE. Tente essas linhas limpando a te- o HGR.
20 LET v-iNT (RND-24)
la (comando CLS) entre as linhas:
30 PLOT X,Y Existe um conjunto diferente, embo-
40 PLOT 63-X.Y ra parecido, de comandos gráficos pa-
PLOT PAPER liXNK 7:125.87 50 PLOT X.43-Y ra os modos de alta e de baixa resolu-
(Dá para ver o ponto?) 60 PLOT 63-X.43-Y ção. Para o modo de baixa resolução te-
PLOT 125,a7:DRAW INK 2:50,50
70 GOTO 10 mos os seguintes: COLOR, PLOT,
Hl. IN e VLIN. Para a alta resolução,
PLOT 125.87:DRAW PAPER Ij INK O ZX-81 não tem o comando
os comandos que mostraremos nesta li-
7 50, 50
-,

DRAW, mas você pode utilizar a instru-


CIRCLE INK 4;127.87,50 ção PLOT para compor uma reta com ção são o HCOLOR e o HPLOT.

e até mesmo esta: pontos. Você poderá ver como isso fun-
Além disso, existem outros comandos
ciona com o programa seguinte, o qual
mais sofisticados para o modo de alta
CIRCLE PAPER 2:INK 6;125,87.50
:DRAU desenha um certo número de quadrados resolução, tais como DRAW, ROTA-
PAPER 3: INK 7; 75.0 utilizando dois laços FOR. ..NEXT. TE, SCALE, ele, que serão tratados em
uma lição futura.
Esta última combinação pode ser uti- 10 FOR N-0 TO 20 STEP 2 Os micros da linha Apple II têm a li-
lizada para produzir alguns efeitos es- 20 FOR M-N TO 43-N mitação de não permitir a exibição si-
petaculares. 30 PLOT M.N multânea de letras e de gráficos de bai-
O
último dos comandos gráf icos do 40 PLOT M.43-N xa e de alta resolução na mesma tela. Só
Spectrum tratados neste artigo o — 50 PLOT N,M
o modelo nacional TK-2000, da Micro-
FLASH —
é igualmente espetacular, e 60 PLOT 43-N.H
digital, tem essa capacidade.
muito utilizado em programação de jo- 70 NEXT M
80 NEXT N
gos. O
que ele faz é reverter rapidamente
as cores da tinta e do papel. E de um modo parecido, você pode
O FLASH deve ser seguido por um imitar o comando CIRCLE, empregan-
número — tanto o I para ligar, como do a seguinte rotina: Para demonstrar a utilização dos co-
o 0 para desligar; eis aqui um exemplo mandos gráficos de alta resolução no
de sua utilização: Apple II e no TK-2000, vamos fazer um
desenho bem simples, passo a passo: um
10 pause 0 30 NEXT N aparelho de TV em que aparecem uma
20 if inkey3-"" then goto 30 série de pontos coloridos, distribuídos
30 FOR n-10 TO 23: SOUND .015 Ela utiliza as duas funções matemá- aleatoriamente na tela. O programa co-
,n: NEXT n ticas —o seno (SIN) e o cosseno (COS) meça com as linhas a seguir, que dese-
40 BORDER 2:
FLASH 1
PAPER 2: INK 6: — para calcular as coordenadas dos pi- nham a caixa do televisor:
" xels que compõem o círculo. Elas serão
50 PRINT "NAO TOQUE 10 HGR2
60 PRINT "ESTE COMPUTADOR E P
!

explicadas em detalhes em um
artigo
posterior, mas, no momento, você po-
20 HCOLOR- 3
ERIGOSO! 30 HPLOT 10,75 TO 200,75
70 PRINT de experimentar com o tamanho do cír- 40 HPLOT 200,75 TO 200.190
80 GOTO 30 culo, modificando os dois números 20. 50 HPLOT TO 10,190 (
O número máximo que você pode ter é 60 HPLOT TO 10,75
Quando você tiver entrado esse pro- 22 (maior que isso não caberá na tela).
grama, rode-o. Então pressione qual- Outra maneira é modificar a posição do A linha 10 define o tipo de tela grá-
quer tecla... e saia de perto! círculo. No momento, seu centro está fica a ser utilizada, com o comando
em 32,22 (você pode ver essas coorde- HGR2. O HGR significa que a tela será
nadas na linha 20). Não se esqueça de de alta resolução (High-resolution GRa-
fazer o circulo menor se você movê-lo phics), e o número 2 diz ao computador
para perto da borda da tela. que a tela será inteiramente tomada pe-
O ZX-8 1 utiliza o comando PLOT de los gráficos (se não houvesse esse 2, o
um modo parecido ao do Spectrum: computador reservaria automaticamen-
PLOT, seguido por dois números que HM1I te cinco linhas de texto na parte de bai-
controlam a posição do pixel. Mas existe xo da tela). Sem esse comando, o com-
uma diferença: os pixels do ZX-81 são Os microcomputadores compatíveis putador não aceitaria os comandos grá-
dezesseis vezes maiores do que os pixels com Apple II também têm recursos ra- ficos subsequentes.
do Spectrum, pois neste existem apenas zoáveis para a elaboração de desenhos A linha 20 define a cor a ser usada
quatro pixels em cada espaço de carac- em resolução,
alta em cores. para o traço em alta resolução. É usa-
tere, enquanto que o Spectrum tem 64 O Apple tem três modalidades de te- do o comando HCOLOR, seguido do
pixels em um espaço de caractere. la: a tela de texto (invocada pelo coman- número da cor desejada. O Apple não
Como resultado, você não consegui- do TEXT e limpada pelo comando HO- tem um comando para definir a cor de
rá fazer desenhos ou padrões tão deta- ME); a leia gráfica de baixa resolução fundo, como é o caso do MSX e do
lhados: mas tornará cada pixel mais (que tem 40 pixels na direção horizon- TRS-Color. Se for necessário ter uma
visível. tal e 40 pixels na direção vertical, usan- cor de fundo diferente do preto (a nor-
| O programa a seguir traça um padrão do dezesseis cores); e a tela gráfica de mal da tela), usa-se uma sucessão de li-
nhãs paralelas da mesma cor (essa ma-
nobra, porém, leva muito tempo).
As linhas 30 a 60 traçam um retân-
gulo na tela, com o canto superior es-
querdo em (10,75) e o canto inferior di-
reito em (200,190). O comando utiliza-
do é o HPLOT. Esse comando pode ser
usado de várias maneiras.
A variante do HPLOT mostrada nes-
se segmento de programa serve para tra-
çar retas. Os parâmetros básicos para o
HPLOT são conjuntos de dois números
ou expressões numéricas, separados por
uma vírgula. Tais parâmetros indicam
a posição em que o cursor gráfico deve-
rá ser colocado na tela de alta resolução.
Por exemplo: HPLOT 10,75... diz ao
computador para começar a traçar uma
reta em alta resolução, nas coordenadas
X = 10 e Y = 75 (ou seja. 10 pixels dis-
tantes da margem esquerda da tela, e 75
pixels abaixo do topo).
Para traçar uma reta, usa-se o co-
mando do HPLOT seguido da palavra
TO. Por exemplo, na linha 30 do pro-
grama, traçamos uma reta começando
no ponto (10,75), e indo até o ponto
(200,75) — portanto, paralela ao eixo utilizar uma série de cláusulas TO, den- diz ao computador para traçar um pon-
horizontal — usando o comando: tro da mesma linha com o HPLOT. A to em alta resolução, nas coordenadas
linha 70| funciona de modo idêntico às X e Y.
HPLOT 10.75 TO 200,75 quatro linhas dos números 30 a 60. Finalmente, a linha 220 gera novos
O
cursor gráfico agora fica no últi- As linhas 80 e 90 servem para dese- pontos aleatórios em um laço infinito.
mo ponto da tela depois do TO: no nhar a antena. Note que linhas inclina- Para interrompê-lo, use as teclas
exemplo acima, em (200,75). Se quiser- das são traçadas exatamente com a mes- <CTRL> <C>.
mos traçar uma reta a partir daí, não é ma técnica do HPLOT. As linhas res-
necessário especificar um novo começo tantes, de 100 a 170, servem para traçar
círculos na tela
para ela. Basta usar o comando assim: o restante do desenho do televisor, e dar
perspectiva a ele,
HPLOT TO 200,190 Finalmente, para fazer aparecer um Os micros da linha Apple não têm um
Essa nova forma vai traçar uma linha "chuvisco" colorido na tela do televi- comando específico para traçar círculos,
de (200,75) a (200, 90) —
uma reta ver-
1
sor que está sendo esboçado no vídeo do mas você pode imitar o comando CIR-
tical, portanto. seu computador, adicione as linhas: CLE utilizando a seguinte rotina:
A linha 300 simplesmente "congela"
a tela gráfica, impedindo que o fim do 180 X - INT ( RND (1) * 130) + 10 HOME INPUT "COR:";C
:

programa a cancele. 26 12 INPUT "CENTRO (X.Y) " ;XC YC:


,

190 Y - INT ( RND (1) * 95) + 14 INPUT "RAIO: " ;R


Vamos traçar agora o restante do te- HCOLOR- C
66 15
levisor, adicionando as linhas abaixo: 200 COLOR- RND (1) * 10 16 HGR
210 HPLOT X.Y 17 HPLOT XC.YC + R
70 HPLOT 25,85 TO 155. B5 TO 15 220 COTO 180 20 FOR N - 0 TO 6.2856 STEP .1
5.180 TO 25. 180 TO 25.85
80 HPLOT 10, 7S TO 45,50
90 HPLOT 200.75 TO 235,50 As coordenadas dos pontos aleató-
100 HPLOT 200,190 TO 235,165 rios são definidas nas linhas 180 e 190
110 HPLOT 45,50 TO 235,50 TO 2 e são armazenadas nas variáveis X e Y.
35.165 Note que a expressão aritmética sorteia,
120 HPLOT 190.60 TO 230,0 usando a função RND, um número in-
130 HPLOT 190.60 TO 150.0 teiro dentro dos limites da tela.
140 HPLOT 175.85 TO 179,85 TO
179.89 TO 175,69
O HPLOT mostrado aqui é mais sim-
ples, pois é seguido apenas por dois nú-
150 HPLOT 175,105 TO 179,105 T
O 179,109 TO 175,109 meros ou duas expressões numéricas, se-
160 HPLOT 175,135 TO 179,135 T paradas entre si por uma vírgula. Esses
0 179.139 TO 175,139 dois parâmetros indicam a posição em
170 HPLOT 175.155 TO 179,155 T que o cursor gráfico deverá ser coloca-
O 179,159 TO 175,159 do na tela de alta resolução.
A linha 70 traça um outro retângulo Formas simples como esta televisãopodem ser

dentro do primeiro. Note que podemos HPLOT X.Y desenhadas no Apple II e no TK-2000.
IIIIIIIIIIIUH«H^HHIHHHHHIIIIIIII
30 HPLOT TO XC + R * SIN (N) lução. PCLS é o comando p;ira alta re- de cores — neste caso, o vermelho.
, YC + R * COS (N) solução, equivalente ao CLS. A linha 60 desenha a próxima reta.
40 NEXT N Para "ligar" a leia de alta resolução Isto funciona exatamente do mesmo
Essa rotina utiliza as duas funções o programa utiliza o comando SCREEN modo como na linha 50, mas os pontos
matemáiicas —
o seno (SIN) e o cosse- 1,0. O conjunto de cores c escolhido iniciais e finais são definidos no-
no (COS) —
para calcular as coordena- coloeando-se 0 como o segundo no co- vamente.
das de cada pixel que compõe o círcu- mando SCREEN: esse conjunto consiste Para evitar que o computador retor-
lo. Tais funções serão melhor explica- de verde, amarelo, azul e vermelho. Se, ne automaticamente para a tela de tex-
das em uma futura lição; no momento, ao invés disso, você tivesse colocado 1 to, uma vez que a tela de alta resolução
porém, você pode experimentar com o o conjunto de cores seria branco, azul tenha sido desenhada, estabelecemos um
tamanho do círculo, modificando os ciano, magenta e laranja. laço sem fim: é o que a linha 70 faz, com
dois números 20 na linha 20. O número Esse programa desenha linhas em o comando GOTO 70. Se o computador
máximo que se pode ter é 22 (a tela não verde e vermelho, que são as cores pré- ligasse novamente a tela de texto, não
comporta um valor mais alto). Você po- definidas (são as normalmente utiliza- seria possível ver o que foi desenhado
de também modificar a posição do cír- das pelo computador, se você não espe- na tela de alta resolução.
culo. Seu centro está em 32,22; observe cificar nenhuma oulra). Para utilizar
essas coordenadas na linha 20. Não se qualquer outra combinação do conjun-
esqueça de fazer o círculo menor se vo- to de cores você deverá utilizar o coman-
círculos no trs-color
cê movê-lo para peno da borda da tela. do COLOR. Isso será explicado em de-
talhes, futuramente. É muito fácil desenhar círculos no
A primeira reia é desenhada pelo co- TRS-Color, pois o seu BASIC possui
mando LINE na linha 50. Os números en- um comando CIRCLE.
tre parênteses dizem ao computador em Este programa desenhará três círcu-
Assim que você liga o computador, que pontos você quer que a linha comece los com tamanhos diferentes, cada um
de texto. Nela você pode
ele exibe a tela e termine. A tela de alta resolução c divi- com uma cor diferente.
mostrar todos os caracteres do teclado, dida em 256 pixels por 192 — no sentido
mais os caracteres gráficos da ROM, já vertical, eles são numerados de 0 a 191, 20 PMODE 3,1
utilizados antes. a partir do alto; no sentido horizontal, 30 PCLS
40 SCREEN 1 ,
Se você quiser desenhar qualquer coi- de 0 a 255, a partir da esquerda. Note que
50 CIRCLE (70.95) ,10.2
sa mais sofisticada do que aquiio que es- a convenção adotada no TRS-Color pa-
60 CIRCLE (116,95) ,20.3
ses simples gráficos permitem, deve em- ra as coordenada* cartesianas é o oposto 70 CIRCLE (184.95) 30,4 .

pregar os gráficos de alta resolução da ao normal. 60 GOTO 80


máquina. Estes são obtidos em uma te- LINE (0,191)-(255,0) tra-
Portanto,
la completamente diferente da tela de ça uma reta com a origem em X = 0 e A modalidade gráfica é escolhida co-
texio — pois, nos computadores com- Y= 191 e fim cm X = 255 e Y=0. mo no programa anterior, assim como
patíveis como TRS-Color, não é possí- Finalmente, PSET sozinho, no co- o conjunto de cores para os círculos.
vel colocar-se, ao mesmo tempo, texto mando LINE, diz à máquina para dese- O comando CIRCLE nas linhas 50 a
e gráficos de alta resolução na mesma nhar a cor de maior número do conjunto O primeiro e
70 tem quatro elementos.
tela.

RETAS CRUZADAS

Eis aqui um programa que desenha


duas relas cruzadas na tela, utilizando
a tela gráfica em modo 3;

20 pmode 3,1
30 PCLS
40 SCHEEN 1.0
50 LINE (0.191)-[255.0) PSET .

60 LINE t0.0)-(Z55. 191) .PSET


70 GOTO 70
O programa começa especificando a
modalidade gráfica e a página (parte da
memória do computador) em que você
deseja colocar a informação gráfica. A
linha 20 declara isso com PMODE
3,1.
Essa informação diz à máquina para de-
senhar em modalidade de gráficos 3 e
para armazenar qualquer coisa que vo-
cê desenhar na tela na página de memó-
ria gráfica número ISe você quiser de-
.

senhar apenas uma tela cheia de gráfi-


cos será mais fácil especificar a página 1

I A linha 30 limpa a tela de alta reso-


IIIIIIIIIIIIHHMHHHBnHHIIIIIIIHI
o segundo números definem as coorde- A 200 desenha
linha a janela, en- do teclado, mais os caracteres do gráfi-
nadas do centro do círculo, o lerceiro é quanto o pára-brisa é determinado pela co da ROM. Estes últimos já foram uti-
o seu raio, em pixels, e o quarto é a cor. linha 220. comando CIRCLE é utili-
O lizados em programas anteriores.
Assim, o círculo desenhado pela linha zado pelas linhas 230 e 270 para definir Para desenhar figuras mais sofistica-
50 lem o seu centro em (70,95), um raio as rodas e pelas linhas 250 e 290 para das do que aquelas que vimos até ago-
de 10 pixels e está colorido de amarelo desenhar as calotas. ra, é necessário utilizar os gráficos de al-

(Cor 2). ta resolução da máquina. Estes são ob-


O círculo desenhado pela linha 60 é tidos em uma tela completamente dife-
azul, com raio de 20 pixels, e com cen- rente da tela de texto, já que os compu-
tro em (1 18,95). O último circulo, dese- tadores da linha MSX não permitem que
nhado pela linha 70, é vermelho, com Agora que o desenho está feito, é fá- sejam colocados, ao mesmo tempo, tex-
raiode 30 pixels e com centro em cil colorir o seu jipe: você nem precisa to e gráficos de alta resolução numa úni-
(184,95). de uma pistola de pintura, porque a má- ca tela.
Finalmente, a linha 80 é um laço que quina faz isso através do comando
impede que o programa pare e desligue PAINT. VOLTANDO Ã LINHA RETA
a tela de alta resolução. O comando PAINT preenche com
uma cor específica qualquer forma que
você tenha desenhado na tela. Ele tam- Eis aqui um programa que desenha
DESENHE UM JIPE
cruzadas no vídeo, utilizan-
bém possui quatro elementos. Os dois duas retas
primeiros, como você já deve ter adivi- do a tela gráfica em modo 2:

Agora você possui os


ingredientes pa- nhado, marcam o local onde a pintura
10 SCHEEN 2
ra desenhar muitas coisas diferentes. Di- deve começar. O terceiro é o código da
20 LINE(0.191)-(255.0) .15
gite e rode o programa abaixo e você ve- cor a ser utilizada. E o quarto é o códi- 30 LINE (0.0)-(255, 191) .1
rá o esboço da carroçaria de um jipe, go de cor da borda, ou da linha onde 40 GOT040
ainda sem os detalhes internos mostra- a pintura deve acabar.
dos na figura 3. Acrescente essas linhas e você verá, O programa começa especificando a
na prática, como fica o programa: modalidade gráfica e a página (parte da
20 pmode l memória do computador) na qual você
l ,
190 PAINTÍ90.100) .2,4
30 PCLS deseja colocar a informação gráfica. A
210 PAINTU20.110) ,4,4
40 SCREEN 1 .
240 PAINT (82 116) 3 , . .
linha 20 declara isso com SCREEN 2,
bO LINE (106.64) - (188,64) .PSET 260 PAINTI82, 116) ,2,2 dizendo à máquina para desenhar em
60 LINE- C188. 116) .PSET 280 PAINT (166 116) 3, , , modalidade de gráficos 2.
70 LINE- (104. 116) PSET
80 LINE- (96, 96) PSET .
,

300 PAINTU66.116) .2,2 A primeira reta é desenhada pelo co-


310 PAINTI180.80) ,2,4 mando LINE, na linha 20. Os números
90 LINE-170.96) PSET ,

110 LINE-(74.96! PSET , Rode agora o programa: como num entre os parênteses dizem ao computa-
120 LINE- (74 86) PSET , . passe de mágica, o jipe se cobrirá de dor onde a linha deve começar e termi-
130 LINE- (114 86) PSET . ,
cores. nar. A tela de alta resolução é dividida
140 LINE- (132. 104) PSET .
Não é possível colocar ao final do em 256 pixels por 192: no sentido verti-
ISO LINE- (140. 104) ,PSET programa todas as linhas com PAINT, cal eles são numerados de 0 a 9 1 a par-
1 ,

160 LINE-U40.64) PSET tir do alto; no sentido horizontal, de 0


170 LINEI76.96) - (76. 108) PSET
,

,
por uma razão muito importante:
A área que você quer colorir deve ser a 255, a partir da esquerda.
ISO LINE- (100. 108) -PSET
fechada completamente por uma série Portanto, LINE <0,191)-U55.0) tra-
320 GOTO 320
de rctas da mesma cor (a cor da borda), ça uma reta com origem em X = 0 e
Assim como antes, a modalidade es- ou pela borda da tela. Qualquer linha Y = 191 e fim em X = 255 e V = 0.
colhida é a de número 3. A linha 50 co- de cor diferente que estiver localizada no O número no final do comando LI-
meça traçando uma linha vermelha de meio da figura geométrica a ser preen- NE diz à máquina que cor ela deve em-
(108.64) a( 188,64). Para continuar o de- chida será pinlada por cima. pregar (neste caso, existem dezesseis co-
senho a partir do mesmo ponto, não se As cores disponíveis no PMODE 3,1 res, numeradas de 0 a 15).
deve dizer ao computador por onde co- são: verde (l), amarelo (2), azul (3) e A linha 30 desenha a próxima reta.
meçar —
ele apenas prossegue de onde vermelho (4). Se você quiser pintar o ji- Isso funciona do mesmo modo que na
estiver no momento. As linhas 60 a 160. pe de modo diferente, tudo o que tem linha 20, mas os pontos iniciais e finais
portanto, apenas definem os finais de li- a fazer é modificar o número de cor da são definidos novamente.
nhas sucessivas. pintura nas linhas PAINT correspon- Para evitar que o micro reiorne à te-
la de texto unta vez que a tela de alta re-
A linha 170, no entanto, desenha dentes.
uma linha a partir de um novo ponto Você pode, se quiser, acrescentar ou- solução tenha sido desenhada, estabele-
inicial: assim tanto o inicio como o fim tras partes ao jipe, equipando-o com no- cemos um laço sem fim: é o que a linha
devem ser definidos. vos elementos, como uma roda de dire- 40 faz, com GOTO 40. Se o computa-
Acrescente agora algumas linhas pa- ção, por exemplo. Para isso, empregue dor religasse a tela de texto, você não
ra definir o pára-brisa, as rodas e as os comandos LINE e CIRCLE. seria capaz de ver o que foi desenhado

calotas:
na tela de alta resolução.

200 LINE(140.86)-(188.88) PSET ,

220 LINE ( 1 18 64) - (104 , 86) .PSET


, CÍRCULOS NO MSX
230 CIBCLE(82,116) ,14,3 computador,
250 CIRCLE(82,116) ,6,2 Assim que você ligar o
ele exibirá a tela de texto, na qual po- Assim como no TRS-Color, é fácil
270 CIRCLEU68. 116) .14.3
290 CIHCLEU6a,116> .6,2 dem ser mostrados todos os caracteres desenhar círculos no MSX, pois o seu
III Illlllllll
BASIC conta com um comando chama- A modalidade gráfica é escolhida co- 180 LINE (140 ,89) - (188,89)
do CIRCLE. Este programa desenha mo no programa Só que a cor
anterior. 200 LINE(118,64)-(104.86)
com tamanhos diferentes,
três círculos de fundo da definida antes, com
tela é
210 CIBCLE(82. 116) .14,3
230 CIRCLE(82,116) ,6,2
cada um de uma cor: o comando COLOR. O primeiro núme-
250 CIRCLE(168, 116) .14.3
ro é a cor do caractere (cor de frente), 270 CIRCLE(168,116) ,6.2
10 COLOR 4,15
e o segundo, a cor de fundo.
20 SCREEN2
30 CIRCLE(70.9S) ,10,2
Ocomando CIRCLE nas linhas 30 a As linhas 170 e 180 desenham a ja-
40 CIHCLKU18.95) .20,4 50 tem quatro elementos. O primeiro e nela, e a linha 200, o pára-brisa. co- O
50 CIRCLE (164, 9 .30,8 Ti )
o segundo números definem as coorde- mando CIRCLE é utilizado pelas linhas
60 GOTO 60 nadas do centro do círculo, o terceiro é 210 e 250 para definir as rodas, e peias
o seu raio, em pixels, e o quarto é a cor. linhas 230 e 270 para desenhar as
Assim, o círculo desenhado pela linha calotas.
30 tem o seu centro em (70,95). um raio
de 10 pixels e é colorido de amarelo
(cor 2).
Ocirculo desenhado pela linha 40 é
azul, com um raio de 20 pixels, e centro Para pintar o seu jipe, você nào pre-
em (1 18,95). O último circulo, desenha- cisade uma pistola de pintura: a máqui-
do pela linha 50. é vermelho, com raio na faz isso para você por meio do co-
de 30 pixels e centro em (184,95). A li- mando PAINT.
nha 60 é um laço que impede que o pro- O comando PAINT preenche com
grama pare e desligue a tela de alta re- uma cor específica qualquer forma que
solução. você tenha desenhado na tela. Ele tam-
Qual a diferença entre gráficos de bém possui quatro elementos. Os dois
baixa, média e alta resolução? DESENHE 0 JIPE NO MSX primeiros, como você já deve ter adivi-
O grau de resolução gráfica a ser ob- nhado, marcam o local onde a pintura
tido em um computador depende do deve começar. O terceiro é o código da
número 6e pixels que se pode endere- Como você já deve ter percebido, al-
çar individualmente na tela. O pixel gumas seçòes de nosso texto repetem se-
cor a ser empregada. O
quarto é o códi-
(que vem da abreviação, em inglês, de ções anteriores. Isso se deve à similari- go de cor da borda, ou da linha, onde
a pintura deve acabar.
picture eíement) é o pontinho gráfico dade dos procedimentos nos diversos
que um comando BASIC acer de ou micros. Agora, digite e rode o progra-
Acrescente essas linhas ao programa
apaga. Naturalmente, como a tela tem e você verá, na prática, como fica o
ma abaixo.
um tamanho limitado, a resolução é programa:
proporcional âs dimensões físicas de 10 COLOR 4,15
cada pixel. 20 SCREEN2 170 PAINT (142.66) .10.10
Do ponto de vista técnico, a alta re- 30 LINE (108,64)- (188. 64} ,10 190 PAINT{77,99) ,4,4
solução gráfica é obtida quando hã 40 LINE -{188.88) ,10:LINE-<188, 220 PAINT(82 116) .3,3
,

mais de 100 000 pixels por tela (por 116) 240 PAINT (82. 116) ,2.2
exemplo, o micro de tipo IBM-PC tem 50 LINE -'(104,116) 260 PAINT(168,116) .3.3
600 pixels na horizontal por 200 na 60 LINE- (96.96) 280 PAINT(168,116) ,2.2
vertical). A resolução média ficaria com 70 LINE-(70.96)
algo entre 30 000 e 1 00 000 pixels; a 80 LINE-(74,96) Rode agora o programa e você verá
essa faixa pertencem o Sinclair Spec- 90 LINE-(74,86) cada seção do jipe sendo preenchida
trum, o TRS-Color, o Apple II e 0 100 LINE-(114,86) com belas cores.
TK-2000. Jé a resolução baixa tem de 110 LINE-U32.104) Não é possível colocar todas as linhas
2 500 a 10 000 pixels por tela Ipor 120 LINE-(140.104) com PAINT no final do programa, por
exemplo, o TRS-80 e o ZX-81 1. Entre- 130 LINE- (140,64) ,10 uma razão muito importante:
tanto, muitos fabricantes (como os da 140 LINE {76,96)-{76,108) A área que você pretende colorir de-
linha Apple III chamam de alta resolu- 150 LINE- (100,108)
ve ser fechada completamente por uma
ção os gráficos tecnicamente definidos 160 LINE(140.88)-(188.88) .10
290 GOTO 290 série de retas da mesma cor (a cor da
como de média resolução.
borda), ou pela borda da tela.
O TRS-80 pode ser usado para de- Isso mesmo, ele recria o
agora
jipe. Qualquer linha de cor diferente que
senhar em BASIC? em outra máquina. Assim como ames, estiver localizada no meio da figura geo-
Sim. embora os seus gráficas apa- a modalidade escolhida éa2. A linha 30 métrica a ser preenchida deve ser pinta-
reçam apenas em baixa resolução (128 desenha uma linha vermelha de (108,64) da por cima.
por 48 pixels, em preto e branco!. O co- a (188,64). Como da vez anterior, você As cores disponíveis no PMODE3,1
mando a ser utilizado para "acender" nào precisa dizer ao computador onde são: verde (I), amarelo (2), azul (3) e
um pixel na tela é o SET. Esse coman- começar a desenhar: ele apenas prosse- vermelho (4). Mas você pode querer pin-
do deve ser seguido de dois parâmetros
gue de onde estiver no momento. As li- tar o jipe de modo diferente; nesse ca-
ou expressões numéricas: o primeiro
IX) indica a posição horizontal do pixel nhas 40 a 160, portanto, apenas definem so, tudo o que tem a fazer é modificar
e o segundo (V), a sua posição vertical. os finais de linhas sucessivas. o número de cor da pintura nas linhas
Ele equivale, portanto, ao comando A linha 150. no entanto, desenha PAINT correspondentes.
PLOTdos micros da linha Sinclair. Exis- uma linha a partir de um novo ponto Outras partes, contudo, podem ser
tem ainda os comandos gráficos RESET inicial; assim, tanto o início como o fim incorporadas ao nosso jipe (uma roda
(para "apagar" o pixel aceso) e POINT devem ser definidos. de direção, por exemplo, ou outro equi-
luma função que informa se um deter- Acrescente agora algumas linhas pa- pamento qualquer). Para isso, utilize os
minado pixel está aceso ou apagado).
ra o pára-brisa, as rodas e as calotas: comandos LINE e CIRCLE.
6 PROGRAMAÇÃO 01 JOGOS llll!
COMO CRIAR FLASHES NA TELA
UM PROGRAMA SIMPLES OE
BOMBARDEAMENTO AÉREO
ENRIQUEÇA A AÇAO COM
CHAMAS E EXPLOSÕES

ber usar o tipo certo de efeito para o jo- adicioná-los a um programa qualquer;
Faça de seus jogos de ação um
go que está sendo programado. pelo contrário, essa inclusão deve ser
eletrizante passatempo, aprendendo
Os efeitos gráficos para chamas e ex- cuidadosamente planejada.
a obter efeitos gráficos de explosões plosões explicados aqui são adequados Por outro lado, muitos computado-
e incêndios na tela do micra a todos os tipos de jogos que envolvem res têm comandos embutidos no BASIC
a destruição de objetos como constru- que permitem a obtenção de flashes (in-
ções, carros, aviões, tanques, navios, versão rápida de cores no vídeo), que
É relativamente fácil tornar seus pro- etc.Alguns deles ficarão ótimos também são suficientes para muitos tipos de jo-
gramas de jogos mais espetaculares e em jogos espaciais. gos, como os de guerra espacial, e que
emocionantes: para isso, basta acrescen- Entretanto, como os efeitos de cha- têm a vantagem de não exigir adapta-
tar algumas rotinas com efeitos gráficos mas e explosões utilizam o conceito de ções para uso em um jogo determinado.
especiais. E elas não precisam ser mui- blocos gráficos, o tamanho máximo do
to complexas para dar a esses jogos um alvo sobre o qual serão colocados é res-
dinamismo bem diferente. tringido pelas dimensões desses efeitos.
Como você verá nesta lição, existem Isso significa que você não pode Vamos mostrar aqui como criar, nos
muitas maneiras de produzir efeitos vi- micros compatíveis com o Sinclair Spec-
suais em BASIC. É preciso apenas sa- trum (como o TK-90X), o efeito visual
IIIIIIIIIIIHI < PIOGIAMAÇAOOUOGOS 6 |H|||||||||||
de um incêndio provocado pela explo- 10 BORDER 0: PAPER 5: INK 0: 1040 NEXT n
são de uma bomba; depois de ir rom- CLS 1050 STOP
per fortemente, o fogo se extingue gra- 20 LET aS-"
200 PRINT PAPER 4 AT 20.0;aS; Mas, espere: não digite o comando
dualmente, desaparecendo da tela à me- ;

aS;aSr aS RUN, ainda. Você poderia destruir a


dida que o prédio desaba. Isso será ex-
210 PRINT INK 1;AT 19,12;CHRS parte do programa que já foi digitada.
plicado mais adiante. Ao RUN
161; CHRS 161;CHRS 161 invés disso, digite 1000, para
Mas, primeiro, precisamos de um começar a executar só essa pane do pro-
avião e de uma bomba. Portanto, digi- O
que estas linhas fazem, como você
grama. Você verá então uma letra G
te o programa abaixo: verá ao executá-las com o comando
aparecer na tela e depois esvanecer-se
10 FOB N-USR "P" TO USR "q"+7 RUN, é apenas desenhar uma faixa ver- gradualmente, até ser substituída pela le-
20 READ a de, comdezesseis pixels de altura, na
tra F. Isso acontece porque o laço
30 POKE n,a parte de baixo da leia; sobre eia ergue-
40 NEXT n se um armazém ou coisa parecida. A FOR.NKXT, que vai da linha 1000 à
1040, diminui de um em um o valor ar-
50 DATA 32.16,136.154,155,9, forma como isso é feito ilustra bem o
16,32 mazenado na locação de memória
uso de variáveis alfanuméricas no tra-
60 DATA 0,16,16,120,28,28,0,0 23675, que é o ponto inicial para 0 seu
balho com gráficos.
bloco gráfico UDG. Assim, a letra exi-
Usamos aqui a técnica convencional Como você precisa de 64 bloquinhos bida na tela reiroeede gradualmente no
de blocos gráficos definidos pelo usuá- coloridos de verde para fazer o terreno
alfabeto.
rio(UDG), disponível no Spectrum. As- gramado, a linha 20 coloca em a$ uma
sim, criamos imagens tanto para o avião sequência de dezesseis espaços em bran-
O programa de explosão usa um tru-
que semelhante. Para fins de segurança
quanto para a bomba, armazenadas em co. Em seguida, a linha 200 a imprime
de seu programa, digite:
uma área especial, definida pelos ende- na tela quatro vezes, começando na li-
reços devolvidos pelas expressões USR nha 20 e prosseguindo na linha 2 Isso 1 .
POKE 23675,88
"p" e USR "q" na linha 10. Os códi- economiza a digitação de 64 aS! que restaura o valor original do núme-
gos correspondentes estão nas declara- A construção é colocada na tela por ro armazenado na locação de memória
ções DATA das linhas 50 e 60, e são co- meio de um quatro PRINT do caracte-
locadas na memória com o POKE da li- re gratico de coaigo i n i (que e o asso-
nha 30. Ao rodar o programa, nada ciado à tecla r, no computador, confor-
acontecerá de inicio. Para verificar se os me a definição no programa anterior).
códigos gráficos em DATA foram digi- Para fazer o avião voar, sò é preciso
tados corretamente, digite a linha de co- incluir no programa as seguintes linhas:
mando abaixo (sem precedê-la com um 215 PAUSE 100
número de linha).
220 LET ay-6: LET by-ay
PRINT AT 10,15;CHRS 159:" " 230 FOR x-0 TO 30
CHRS 160 240 PRINT AT ay x " ";CHRS 159
,
;

— que mostrará na tela os dois blocos


250 LET bx-x
260 IF by<19 THEN PRINT AT by
gráficos definidos.
+l,bx+l;CHRS 160;AT by bx " " ,
;

Emseguida,você precisará de um 270 LET by-by+1; LET bx-bx+1


prédio ou casa para bombardear. Não 280 IF X>29 THEN PRINT AT ay,
há necessidade de um novo programa X+li" "
para isto. Apenas modifique as linhas 290 NEXT X
10 e 50 do programa anterior.
Não nada de incomum nessa
existe
10 FOR N-USR "r" TO USR *r"+7 seção do programa: apenas as técnicas
20 READ a convencionais de movimentação de um
30 POKE n.a bloco gráfico na tela, que temos usado
40 NEXT n em praticamente todos os programas de
50 DATA 255.153,255,153,255,
jogos para o Spectrum. Observe, entre-
153,255.255 tanto, que as linhas 240, 260 e 280 são
Execute o programa de novo e teste- necessárias para apagar as últimas po-
o, digitando esta linha (novamente, sem sições do avião e da bomba, à medida
colocar número de linha antes): que estes são deslocados pela tela.
PRINT AT 20.15; CHRS 161
Tendo ficado satisfeito com o resul-
tado visível na tela, digite NEW
para
apagar o programa da memória. Os bio- Vamos agora à parte mais importante
cos gráficos definidos antes ficarão ar- do nosso exercício de programação: a
mazenados na memória RAM do com- explosão. É mais fácil vê-la na tela do
putador, a menos que você o desligue. que tentar descrevê-la.
Portanto, antes de entrar o restante
do programa, digite as linhas abaixo:
COMECE 0 BOMBARDEIO
1000 FOR n-88 TO 80 STEP -1
1010 PRINT AT 10.15;CHRS 150
Entre agora o programa do bombar- 1020 POKE 23675.
l# deio por meio das linhas seguintes: 1030 PAUSE 50
imiiiHHim^iiBBiiiimiiiiii
indicada. Em seguida, apague todas as
linhas de 1000 a 1050 e digite o restante loca na
,
das parles dos gráficos e os co-
memória através do POKE. As Ql iputadores compatíveis com
do programa de bombardeio: linhas 300 e 340 usam a técnica descrita
anteriormente para retirar uma imagem essa linha têm excelentes recursos para
90 POKE 23675,88 e substituí-la por outra. a obtenção de efeitos visuais dramáticos,
100 FOR n-0 TO 31: READ a: Existe, entretanto, uma diferença usando programas bastante curtos. Ten-
POKE USR -a"+n.a: NEXT n muito importante. Os UDG
que criam te digitar e executar o programa abai-
300 FOR e-86 TO 80 STEP -1 a explosão são baseados nos caracteres xo:
310 POKE 23675, gráficos B e D —
respectivamente,
320 PRINT INK 2;AT 19,12;CHH$ CHRS 145 e 147. À medida que eles fo- 7960 PMODE 3,1
145 :CHRS 147rCHR$ 145: ,PAUSE 7990 PCLS
rem desaparecendo da tela, você não vai
6
querer que eles sejam substituídos por 8000 FOR F-l TO 1000
330 PRINT INK 2;AT 19,12;CHRS 8010 SCREEN 1,0
147 ;CHR$ 145; CHRS 147: PAUSE outras letras do alfabeto. Assim, os pri-
8020 SCREEN 1,1
meiros oitos elementos de cada declara-
6 B030 NEXT F
340 NEXT e ção DATA, representando os caracteres 6040 CLS
400 POKE 23675.88 —
A e C CHRS 144 e 146, respectiva-
500 GOTO 210 mente —são todos zeros. Observe que o programa coloca fai-
8000 DATA 0,0.0.0.0,0,0,0,2,128 Deste modo, ao invés de obter A e C xas coloridas que migram através da te-
,25,126,126.255.255,255 substituindo B e D na tela, você obtém la; esse efeito é causado peta alternân-
9000 DATA 0..0. 0,0. 0.0. 0,0. 4. 33, cia super-rápida dos diferentes conjun-
espaços em branco. Se você quiser ver
144,66.231.255,255.255 como isto funciona em "câmara lenta", tos de cores no computador. Ele pode
inclua a linha abaixo (não esqueça de ser usado, entre outras coisas, para as-
linhas 100, 8000 e 9000 definem
As
similar o fim de uma fase do jogo. co-
os UDGque você precisa para explosão. retirá-ta, depois):
A linha 100 lê os dados contidos nas li- mo uma blindagem que foi penetrada.
335 PAUSE 100 O
modo gráfico é definido pela linha
nhas 8000 e 9000, com os códigos nu-
A linha 400 é necessária, evidente- 7980, e a seguir a tela gráfica é limpa pe-
mente, para restaurar o valor original la linha 7990. A linha 8010 liga um con-

da memória 23675, que era 88, antes junto de cores, enquanto a linha 8020
que o programa se repita de novo. religa o conjunto anterior. O laço
FOR... NEXT nas linhas 8000 e 8030 al-
terna os conjuntos de cores em 1000

A alternância liga e religa os conjun-


tos de cores muito rapidamente — tão
.

KOGKAMACÃODtJO IHIIIIIIIIIII
rapidamente, na verdade, que o apare- final uma linha com comando RE- 8030 PUT (HX,BY+N)-(HX+15,BY+15
lho de TV nunca tem tempo de mudar TURN como foi feito anteriormente. ) E2 PSET
, ,

as cores na tela completamente antes de 8040 FOR K-l TO 100:N£XT


7990 PMODE 3,1 8050 PUT (HX,HY+N)-(HX+15,HY+15
entrar em ação o outro conjunto. Co- 8000 FOR F-l TO 3
mo consequência, apenas uma faixa es- ) B PSET
, ,

8010 FOR K-0 TO 1 6060 NEXT


treita da tela é mudada para cada cor. B020 SCREEN l.K 9000 DATA 0,12,192,0,3,195,63,2
Se você pretende utilizar esse progra- 8030 FOR J-l TO 4
52,63.252,255,255,255,255,255,2
ma na forma de uma sub-rotina dentro 8040 PCLS J 55
de outro jogo (no qual funcionará ape- 8050 NEXT J
nas com um dos comandos PMODE B060 NEXT K
descritos na página 144) ou com o pro- 8070 NEXT F
grama de batalha espacial apresentado 8080 CLS Dois conjunios de chamas são colo-
a seguir, terá que fazer algumas altera- Sob a forma de sub-rotina, ele funcio- cados na tela pelo comando PUT.
ções. Primeiro, apague as linhas 7980 e nará em qualquer um dos modos gráfi- Os dados para os conjuntos de cha-
7990; em seguida, adicione a linha: cos com conjuntos de duas cores (PMODE mas estão nas declaraçõesDATA das li-
0, 2 e 4) e de quatro cores (PMODE 1 e 3). nhas 9000 e 9010. Eles são colocados
8500 RETURN com comandos POKE na
Além de mudar os conjuntos de cores, a ro- tela, com as
Veja agora o programa a seguir: tina também limpa a tela linhas 30 e 50. O programa está escrito
As linhas 80.10 a 8050 são um laço FOR em uma modalidade gráfica de quatro
10 PMODE 1,1
. .

20 DIM A{3) ,BÍ3) ,M{3)


NEXT que colore a tela com as cores dis- cores. As linhas 60 e 70 capturam, atra-
poníveis no conjunto ativo. vés do comando GET, as formas gráfi-
200 FOR K-1536 TO 2016 STEP 32
210 READ A 8 POKE K A POKE K+l
. :
. :
Uma última variação do programa: cas na tela e as armazenam nos conjun-
B tos El e E2, dimensionados na linha 20.
, 7990 PMODE 3,1
220 NEXT 8000 FOR F-l TO 5 As linhas 8000 e 8060 animam as cha-
230 GET(0,0)-(15,15) ,A,G B010 SCREEN 1.0 mas. Quando o programa passa pelo la-
240 GET{0.16)-(15,31) ,M,G 8020 FOR K-l TO 200: NEXT K ço FOR. ..NEXT, os conjuntos El e E2
250 PCLS 8030 SCREEN 1,1 surgem na tela, e apagam quando se
260 MX-120:MY-191:PX-120:PY-20 8040 FOR K-l TO 200: NEXT K coloca sobre eles o conjunto de espaços
270 PUT (PX.PY) -(PX+15.PY+15) ,A 8050 NEXT F
.PSET 8060 CLS
280 SCREEN 1,0
290 PUT (MX,MY)-(MX+15.MY+15) ,B Você pode escolher entre digitá-lo as-
.PSET sim como está (como um programa au-
300 MY-MY-4 tónomo) ou na forma de sub-rotina (di-
310 IF MY<36 THEN GOSUB 8000 :GO gitando a linha 7990 e adicionando um
TO 260 comando RETURNao seu final).
320 PUT (MX.MY)-(MX+15,MY+15) ,M A rapidamente, pois as
tela piscará
.PSET linhas 8020 e 8040 inserem pequenos re-
330 GOTO 290
tardos de tempo, dando oportunidade
9000 DATA 252,63,3,192,15,240.6
suficiente para a mudança de cor entre
1,124.58,172,245,95,213,87,213,
87 um conjunto e outro.

O programa mostra uma nave extra-


na iminência de ser atingida por
terrestre Podemos obter efeitos visuais ainda
um míssil. No momento que este alcan- melhores através da programação de
ça o alvo, entra em ação a sub-rotina de- gráficos animados. Eis aqui uma idéia
finida anteriormente, que move faixas para fazer a animação gráfica das cha-
coloridas pela tela. mas de um incêndio, que você poderia,
Quando usado com a sub-rotina, por exemplo, superpor a um alvo atin-
ele faz faixas com qualquer PMODE gido por uma bomba. O programa foi
que se queira, de modo que pode ser adi- escrito para o PMODE 1, e não pode ser

cionado ao final de um programa, sem usado, do jeito que está, com jogos em
que seja necessário alterar as linhas 8000 outros PMODE. Digite-o e execute-o:
a 8040. 10 PMODE 1,1
Eis aqui uma adaptação do progra- 20 DIM B(3) ,E1 (3) E2(3) .

ma para fazer faixas que resulta em um 30 FOR K-1536 TO 2016 STEP 32


efeito visual mais elaborado, embora os 40 READ A, B POKE K , A : POKE K+l.B
:

gráficos na tela não permaneçam into- 50 NEXT


cados como anteriormente. Você pode 60 GET(0,0) -(15,15) ,E1,0
70 GET(0,16)-(15,31) ,E2,G
digitá-lo e executá-lo do jeito que está,
80 SCREEN 1,0
ou incorporá-lo a um outro programa
250 PCLS.HX-124:HY-146
— como o da animação da nave espa- 8000 FOR N-0 TO 15
cial —
na forma de sub-rotina. Neste ca- 8010 PUT <HX,HY+N)-(HX+1S,HY+15
so, você precisará alterar o programa, ) , El. PSET

I apagando a linha 7990 e adicionando ao 8020 FOR K-l TO 100:NEXT


6 PROGRAMAÇÃO DB JOGOS

em branca B, com PUT. O topo das cha- 270 PUT (HX,HY)-(HX+15,HY+15) ,H ) .E2.PSET

mas é abaixado um pouco de cada vez, , PSET 8040 FOR K-l TO 100: NEXT
pelo+ N nas linhas com comando PUT. 280 SCREEN 1,0 8050 PUT<HX,HY+N)-(HX+15,HY+15)
Você pode usar esse programacomo sub- 290 PUT (PX.PY) -(PX+15.PY+15) ,B .B.PSET
,PSET 8060 NEXT
rotina do programa abaixo, que simula um
300 PX-PX+4 9000 DATA 2.128.25.126.126,255,
bombardeio, mas não se esqueça dc alte-
310 PUT(PX,PY)-(PX+15,PY+15) ,A, 255,255
rar a linha 20 para como ela aparece no pro- 9010 DATA 4.33,144.66.231.255,2
PSET
grama: edite-a com o comando EDIT ou 320 IF PX-20 THEN B-l BX-PX+8 :B : 55,255
digite-a novamente. Apague a linha 80, di- Y-PY+8 9020 DATA 0,12,192.0,3,195,63,2
gitando o número 80, seguido de 330 IF B-l THEN PRESET (BX 8Y) , : 52.63,252,255.255,255,255,255,2
<ENTER> RESET (BX+2 BY) BX-BX+2 BY-BY + 2
. : : 55
20 DIM A I 3 ) ,B(3) . H ( 3) ,E1(3) , E2 (
PSET(BX.BY,4) PSET (BX+2 BY 4)
: , ,

3) 340 IF BY-148 THEN GOSUB B000:B


Y-0:GOTO 250
350 GOTO 290
8070 BETUBN
Os computadores compatíveis com a
9020 DATA 0,0,2,0,130,128,162,1 linha MSX têm excelentes recursos (tais
220 NEXT como os spriles), para se conseguir elei-
230 GETÍ0.0)- (15.15) ,A,G 60,170,170.162,160,130,128,2,0
9030 DATA 0.3,12,51,60,243,255, tos visuais dramáticos, usando-se pro-
240 GET (0 16) - (15,31) H
. , ,

250 PCLS:LINE (0..163)- (255, 191) , 255,255,255,85,85,86,149,86.149 gramas bastante curtos. Tente digitar e
PSET, BF executar o programa abaixo:
Eis aqui duas versõesque permitirão
260 HX-124:HY-146:PX-0:PY-40:B- usar a sub-rotina em jogos programa- 7990 SCREEN 0 KEY OFF
:

dos em outras modalidades gráficas 8000 FOR F-l TO 300


(PMODE). A primeira é um programa 8010 COLOR 10,10,10
que deve ser usado com as PMODE 3 8020 COLOR 4,4,4
e 4; mude apenas o número apropriado. 8030 NEXT F
8040 COLOR 15.4.4
10 PMODE 3,1
20 DIM B(6) .El (6) ,E2(6) O modo de texto da tela é definido
30 FOR K-1536 TO 2496 STEP 64 pela linha 7990 (SCREEN 0). A linha
40 READ A,B:POKE K,A:POKE K+l , 8010 estabelece uma cor de fundo (10)
45 POKE K+32,A:POKE K+33.B para a tela, com a mesma cor de mol-
50 NEXT dura e de frente (por isso todos os nú-
60 GET (0,0)-U5,15) ,E1,G meros são iguais); a linha 8020 especifi-
70 GET (0,16)-(15,31) ,E2,G ca um segundo conjunto de cores para
80 SCREEN 1,0 a tela. O laço FOR. ..NEXT nas linhas
250 PCLS:HX-124:HY-146 8000 e 8030 alterna os conjuntos de co-
8000 FOR N-0 TO 15
res trezentas vezes. A linha 8040 volta
8010 PUT(HX,HY+N)-(HX+15,HY+15)
,El PSET ,
tudo ã situação original de cor da tela,
8020 FOR K-l TO 100: NEXT antes de interromper o programa (se vo-
8030 PUT (HX,HY+N)-(HX+15,HY+15 cê interrompê-lo usando as teclas
) E2, PSET
. <CTRL> <STOP>. antes de termi-
8040 FOR K-l TO 100: NEXT nar o laço de repetição, terá que digitar
8050 PUT(HX.HY+N)-(HX+15,HY+15) pelo teclado, ou com a tecla Fl, o co-
-B.PSET mando existente na linha 8040).
8060 NEXT Como a alternância das cores é mui-
9000 DATA 0,12,192,0.3,195.63.2 to rápida, apenas uma faixa estreita da
52,63.252,255,255,255,255,255,2 tela é mudada para cada cor. Esse efei-
55
to só pode ser conseguido, no MSX,
com a tela de texto. Podemos introduzi-
lo como fase final deum programa de
Em segundo lugar, temos um progra- animação gráfica. Acrescente as seguin-
ma adequado para uso com PMODE 2: tes linhas ao programa:
10 PMODE 2.1 10 SCREEN 2,2
20 DIM B(6) .El (6) ,E2(6) 200 FOR K-l TO 24
30 FOR K-1536 TO 2496 STEP 32 210 READ A: READ B
40 READ A: POKE K.A: POKE K+16. 220 AS-AS+CHRS (A) BS-BS+CHRS (B)
:

A 230 NEXT
50 NEXT 240 SPRITES(2)-A$:SPRITES(1)-BS
60 GET(0,0)-(15,15) ,E1,G 250 MX-120:MY-191
70 GET(0,16)-(15.31) ,E2.G 260 PX-120:PY-20
80 SCREEN 1,0 270 PUT SPRITE 2, (PX.PY)
250 PCLS:KX-124:HY-146 280 PUT SPRITE l.(MX.MY)
8000 FOR N-0 TO 15 290 PUT SPRITE 1, (MX.MY)
8010 PUT(HX,HY+N)-(HX+15,HY+15) 300 MY-MY-4
El PSET 310 IF MY<36 THEN GOTO 7990
8020 FOR K-l TO 100:NEXT 320 PUT SPRITE 1. (MX.MY)
8030 PUT <HX.HY+N)-(HX+15,HY+15 330 GOTO 290
6 1 B

'*OG*mACAODiJOGOS
1IIIIIIIUI » 6 |H|||||||||||
8050 RUN quenos retardes de tempo, dando opor- na linha 40 e colocados nas variáveis AS
9000 DATA 252,0,3.0,15,0,61,2,5 tunidade para o vídeo mudar de cor en- cBS, na linha 45. Após isso, os sprites
8,10,24,5,0,213,3,213,15 tre um conjunto e outro. números I e 2 recebem o conteúdo des-
9010 DATA 0,0.0.0,0,0,0,0.0.0,0 ses cordões. Um terceiro sprite (um blo-
,0,0.0,0,0 co gráfico uniformemente cheio) tam-
9020 DATA 63,128,192,128,240,12
8.124.160.172,168.95.192,87,240 bém é definido na linha 75. A cor que
,87,60 esse bloco de sprite vai assumir ao ser
Efeitos visuais ainda melhores podem colocado na tela é determinada pelo co-
Os dois objetos a serem movimenta- ser obtidos através da programação de
mando PUT na linha 8000 (no caso,
dos na leia (um míssil e uma nave) são sprites nos gráficos animados. Eis aqui
azul, que é o código 4).
definidos pelos códigos gráficos das li- uma idéia para fazer a animação gráfi- As linhas 8000 a 8060 animam as chamas.
nhas 9000 a 9020, montados nos sprites ca de um incêndio.
Cada vez que o programa passa pelo laço
1 e 2. As linhas 270 e 290 colocam esses Oprograma foi escrito para a tela FOR...NEXT, os dois sprites e2são colo- 1

sprites na tela, animando o sprite 1 (o gráfica SCREEN 2. Esse comando tam-


cados na tela. O topo das chamas é abaixa-
míssil) através do ciclo repetido entre bém é usado para definir o tamanho do do um pouco de cada vez, pelo + .N nas li-
290 e 330. sprite. Digite o comando NEW e entre
nhas com o comando PUT, de modo que
Quando o míssil atinge a nave (linha as seguintes linhas:
dá a impressão de diminuição do fogo.
310). o programa de eleito visual de fai- Esse programa pode ser usado como uma*
xas começando em 7990 é acionado. A 10 SCREEN 2,2
sub-roiina do programa a seguir, que simu-
linha 8050 manda executar o programa a
30 FOR K-l TO 32
40 READ A: READ B laum bombardeio: um prédio é alvejado.
principal desde o começo, em virtude da
45 AS-AS+CHRSÍA) :BS-BS+CHR3(B) Adicione as linhas:
necessidade de redefinição da tela grá-
50 NEXT
fica na linha 10. 200 FOR K-l TO 32
60 SPRITES (2) -AS
Em seguida, temos uma adaptação 70 SPRITES(1)-B$ 210 READ A READ B
:

do programa para fazer faixas. Você po- 75 SPRITES(0)-STRINGS(32.255)


215 DS-DS+CHRSÍA) ES-ES+CHRS (B) :

de digitá-lo e executá-lo como está, ou 250 HX-124:HY-146 220 NEXT


adicioná-lo a outro programa, como o 8000 PUT SPRITE 0 (HX HY+16) 12
, , ,
230 SPRITES (3) -DS
da animação da nave espacial. 8005 FOR N-0 TO 15 240 SPRITE${4)-ES
8010 PUT SPRITE 2, (HX.HY+N) ,6 250 LINE(0.163)-{255.191) ,12.BF
7990 SCREEN 0 KEY OFF 260 HX-124:HY = 146:PX = 0:PY'-40:B-
8020 FOR K-l TO 100:NEXT
:

8000 FOR F-l TO 15 0


8025 PUT SPRITE 2, {HX, HY+16)
8005 FOR K-l TO 15 270 PUT SPRITE 4,(HX,HY),9
8030 PUT SPRITE 1 (HX HY+N) , ,
8010 COLOR F.K.K ,
300 PX-PX+4
8040 FOR K-l TO 100:NEXT
8020 COLOR K,F,F 310 PUT SPRITE 3.{PX.PY).14
8060 NEXT
8025 NEXT K 320 IF PX-20 THEN B-l BX-PX+8
9000 DATA 0,0,192,12,3.195,63,4 : :

8030 NEXT F Y-PY+8


8040 COLOR 15.4,4 8,63,252,255,255.255,255,255,25
330 IF B-l THEN PRESET (BX.BY):
5
8050 RUN PRESET (BX+2 ,BY) BX-BX+2 BY-BY+2 :
9010 DATA 255,255,255.255.255.2 :

As linhas 8000 a 8030 formam dois 55,255,255.255,255,255,255,255, :PSET (BX ,BY) 1 PSET (BX + 2 BY)
, : . ,

340 IF BY-148 THEN PUT SPRITE 4


laços FOR.. .NEXT que colorem a tela 255.2S5, 255
{HX HY+16) PRESET (BX.BY) PRES
, :
9020 DATA 12,48,0,3,195.0.252,1
:
,

com cores disponíveis na tela do texto ET (BX+2.BY) GOSUB 8000:BY-0:GO


:

MSX. A última variação do programa é: 2,252,63,255,255,255.255.255,25 TO 250


5
7990 SCREEN 0 KEY OFF
350 GOTO 300
: 9030 DATA 255,255.255,255,255,2 8070 RETURN
8000 FOR F-l TO 5 55.255,255,255.255,255,255,255, 9040 DATA 0,0,0,0,2,12,2,12.130
6010 COLOR 4,10.10 255,255,255
8015 FOR K-l TO 150:NEXT K
,60.130,60,162,255.162,255
9050 DATA 170,255,170.255.162.8
8020 COLOR 10,4,4 Dois conjuntos de chamas, armaze-
5,162.85,130.86,130.86,2.86,2.8
8025 FOR K-l' TO 150:NEXT K nados em sprites de tamanho 2 (ou se-
6
8030 NEXT F ja, 16 por 16 pixels), são colocados na 9060 DATA 0,3.0.3,0,51,0,51,128
8040 COLOR 15,4,4 tela pelo comando PUT. Os dados pa- ,243,128.243,160,255,160,255
8050 RUN ra os conjuntos de chamas estão nas de- 9070 DATA 170,255,170,255.160,8
A tela pisca rapidamente, em cores clarações DATA das linhas 9000 a 9030. 5,160,85,128,149,128.149,0,149.
porque as linhas 8015 e 8025 inserem pe- Eles são lidos pelas declarações DATA 0, 149
IIIIIIIIIIMHH * PROGRAMAÇÃO DE JOGOS 6 j 1111
Nesse trecho suplementar, mais dois 8090 TEXT Essa linha elimina o espaço reserva-
sprites, 3 e 4, são definidos peias linhas 9000 DATA 3,0,8,0.64,0,0,1,15 do para textos da parte inferior da tela,

200 a 240, a partir dos códigos gráficos 0.18,54,37,36,36,4,11,54,54.54, tornando visíveis quaisquer gráficos ali

armazenados nas declarações DATA


46,36 colocados.. Rodando o programa com
9010 DATA 36,11,54,54,46.36,4 essa modificação, você verá as chamas
nas linhas 9040 a 9070.
,100,100.11,54,54,54,37,36,4.10 ocuparem posições cada vez mais bai-
A linha 250 traça um retângulo de cor 0,100.11,54
verde (o chão gramado); a linha 270 co- xas sem desaparecer. Não se esqueça de
9020 DATA 54,54,46,36.100,100
loca dentro dele o desenho da casa. A ,100.11,22.54,54,37,36,100,100, apagar essa linha digitando 15 e < RE-
animação gráfica do avião e da bomba 11,54,54.54,37 TURN >. Nosso incêndio ficará mais
caindo é realizada pelas linhas 310 e 350. 9030 DATA 36,4,0,45.56.255.21 interessante se for produzido por uma
Na linha 340 é chamada a sub-rotina de- 9,35,109.73,45,37,63,63.63.63,3 sub-rotina dentro de um jogo, como no
finida a partir de 8000, que recebe um 9.45.45,45 exemplo a seguir. Após acrescentar es-
RETURN na linha 8070. 9040 DATA 45,45,46,44.46,45,3 sas linhas, você verá uma pequena casa
7.63,231,219,63.255.219,39,64,7 ser bombardeada e pegar fogo. Não se

m et Não é Ião fácil criar efeitos visuais no


3,44,46.5,0

O mesmo incêndio é desenhado e


esqueça de apagar a linha 15.
55 I - 0
60 FOR J - 8674 TO 15810
Apple se o compararmos com outros apagado rapidamente em duas posições STEP 10 24
micros. Ao invés de representar os de- diferentes, dando a impressão de fogo. 70 READ A(I) ,B (I)
senhos através de números binários con- As chamas desaparecem lentamente na 80 I - I + 1
vertidos para decimais e colocados na parte inferior do vídeo. O programa 100 NEXT
memória de vídeo ("1" representaria funciona da seguinte maneira: 190 I - 0
ponto aceso, e "O", ponto apagado), A tabela de figuras está nas linhas 200 FOR J - 8674 TO 15810
temos que criar uma tabela que pode ter DATA (9000 a 9040). Ela é colocada na STEP 1 024
até 256 figuras, e uma vez que esteja memória pela repetição do comando 210 POKE J,B(I) POKE J + :

num lugar apropriado da memória po- POKE da linha 40, devida ao laço 1. AU)
FOR.. .NEXT das linhas 30 e 50. A li- 215 I - I + 1
de-se desenhar e mover as figuras com
220 NEXT
o comando DRAW, sendo a cor defini- nha 20 informa onde está a tabela de fi-
235 FOR K - 1 TO 1000: NEXT
da por HCOLOR. O programa a seguir guras na memória. A linha 10 limpa a 250 HX - 139:HY - 153 PX - 259: :

move uma chama na base da tela, tela,estabelece o modo gráfico de alta PY - 40 :B - 0


resolução, fixa o tamanho (SCALE) e 290 PX - PX - 4
10 HOME : HGR : SCALE- 1: ROT"
a orientação (ROT) da figura. 300 HCOLOR- 6: DRAW 2 AT PX.PY
64
20 POKE 232.0: POKE 233,3 As linhas 8000 a 8060 animam as cha- 310 HCOLOR- 0: DRAW 2 AT PX.PY
30 FOR K - 768 TO 866 mas e as fazem desaparecer. Cada vez 320 1F PX - 239 THEN B -
40 READ A: POKE K , que o programa repeli.' as linhas que fi- 1:BX - PX:BY - PY + 8
NEXT cam entre FOR e NEXT, as chamas são 330 IF B - 1 THEN HCOLOR- 0:
50
250 HX - 124:HY - 146 desenhadas e apagadas em duas posições HPLOT BX.BY: HPLOT BX -
2, BY:BX - BX - 2:BY -
8000 FOR N - 1 TO 15 diferentes da tela. Elas vão baixando
BY + 2: HCOLOR- 3: HPLOT
8010 HCOLOR- 5 lentamente devido ao +N nas linhas
BX.BY: HPLOT BX - 2 BY .
8020 FOR K - 1 TO 3 HPLOT, de forma que o fogo parece
8030 DRAW 1 AT HX HY + N: HCOL 340 IF BY - 152 THEN GOSUB
,

acabar. Issoacontece porque o desenho 8000 BY - 0: COTO 190


OR- 0 :

invade o espaço reservado para texto na 350 GOTO 290


8040 DRAW 1 AT HX.HY + N: HCOL
parte inferior da tela, onde podemos co- 8090 RETURN
OR- 5
8050 DRAW 1 AT HX + 3,HY + N + locar dados gráficos sem que eles apa- 9050 DATA 0,3.12,51,60.243,
2: HCOLOR- 0 reçam. Para entender melhor, experi- 255.255.255,255.85.85,86.
8060 DRAW 1 AT HX + 3.HY + N + mente introduzir a linha: 149,86,149
2: HCOLOR- 5 A casa é desenhada pelos comandos
8070 NEXT K 15 POKE -16302,0 POKE da linha 210. O padrão do dese-
8080 NEXT N nho é obtido da linha 9050 e guardado
nas variáveis indexadas A e B. Progra-
mar desenhos dessa maneira é mais fá-
cil que definir tabelas, mas quando se
desejamovimento e velocidade (como
nas chamas e no avião) é preciso usar
as tabelas e o comando DRAW.
O formato do avião já estava na ta-
bela do programa anterior. As chamas
são a figura 1 da tabela, e o avião é a
figura 2. Essas figuras são desenhadas
respectivamente pelos comandos
DRAW í e DRAW 2.
Para parar o programa aperte simul-
taneamente < CTPL > e C. Mesmo que
não apareça nada na tela, digite TEXT
e aperte < RETURN > e tudo voltará
ao normal.
,

IIIIIIIIIIIHHHMB«up*"<"'t * lllllllll
©S COMAN REÂD Se você pretende evitar a digitação
de programas longos e cansativos,
convém preparar seu computador para

EDATA a leitura de dados armazenadas


internamente em declarações DATA.

As variáveis são o grande responsá-


vel pela versatilidade do computador.
Atribuir valores a elas é, a maior parle
das vezes, simples e direto: basta, por
exemplo, dizer LET X = 5. Mas há oca-
siões em que a quaniidade de informa-
ções que se deseja utilizar em um pro-
grama é muito grande. Nesses momen-
tos, é preciso recorrer às declarações
DATA, e aos comandos READ
e RES-
TORE (esses comandos não estão dis-
poníveis no BASIC de alguns micros).
A palavra DATA(dados, em inglês)
é utilizada para muitas coisas. Assim,
tudo o que ("dado" pelo
é fornecido
programador ou pelo usuário) ao com-
putador é incluído nessa categoria. Nes-
se artigo, porém, vamos usar a expres-
são dados apenas em seu sentido mais
restrito, ou seja, informações incluídas
em um programa por meio da declara-
ção DATA.
A declaração INPUT serve para atri-
buir valores a uma variável. Mas ela é
útilsomente enquanto a informação es-
tiversendo fornecida ao computador ca-
da vez que o programa for rodado.
Existem valores fixos, porém, que
não precisam ser entrados ou alterados
pelo operador, e podem, assim, ser in-
corporados permanentemente ao pro-
grama. Neste caso, entra em cena o se-
gundo método de atribuição: a declara-
ção LET. Mas, quando as informações primeiro programa precisará de 46 de- "SEMANA" é atribuído a B$, etc O com-
são em grande quantidade, o emprego
clarações LET a mais, enquanto o se- putador ignora qualquei declaração DA-
de comandos LET torna-se cansativo. gundo exigirá apenas uma ou duas li- TA a menos que uma declaração READ fa-
Veja a seguir um exemplo onde uma nhas a mais. ça com que ele a leia.
lista fixa de cabeçalhos é utilizada para Nos compatíveis com o Spectrum
imprimir um documento: (como o TK-90X), as palavras DATA 10 DATA ALEMANHA
devem estar sempre entre aspas. Nos ou- 30 READ AS.BS
10 LET AS-"DIA"
modelos as aspas são dispensáveis. 30 DATA BRASIL. ITÁLIA. ESPANHA
20 LET B3" "SEMANA" tros
A 40 READ CS.DS
30 LET CS-"MES" linha 100 passaria a ser escrita assim:
40 LET C$-"AN0" É mais fácil ler o programa quando
50 PRINT AS.BS.CS.DS
"MES"
lodos os DATA estào reunidos em um
Veja como DATA pode ser utilizada mesmo lugar. E existe uma regra inaba-
com o mesmo objetivo e com uma re- COMO FUNCIONAM READ E DATA lável: os comandos DATA devem apa-
dução no número de linhas necessárias: recer na ordem em que o computador
Quando o computador se depara com vai lê-los, por meio da instrução READ.
10 READ AS.BS.CS.DS uma instrução READ, ele passa a procu-
Z0 PRINT AS.BS.CS.DS em todo o programa onde se encontra
rar
100 DATA DIA. SEMANA. MES, ANO DIFERENTES TIPOS DE DATA
a primeira declaração DATA. Então ele a-
Em
programas curtos não há quase tribui o primeiro item de DATA à varíávei
diferença entre usar LET ou DATA. correspondente no comando READ. No Além de cordões alfanuméricos,- as
Agora, se você quiser trabalhar com cin- programa acima, o cordão "DIA", na de- declarações DATA podem conter núme-
Iqúenia cabeçalhos, em vez de qualro, o claração DATA, é atribuído à variável AS, ros, A linha Sinclair Spectrum também
J "

I IIIIIIIIIIHHHI lllllllll
COMO FUNCIONAM AS A DECLARAÇÃO RESTORE
APLICAÇÕES PARA LISTAS
DIFERENTES TIPOS DE DATA DE DATA
UTILIZE DATA PARA FAZER COMO DESENHAR GRÁFICOS
UMA LISTA TELEFÓNICA SIMPLES A PARTIR DE DATA

RECIFE, a #5, então AS receberia o va- ICO"


lor 256! Embora errada, ela não seria re-
15 RESTORE
20 INPUT "Digite o nome" RS ,
jeitada {a não ser no Spectrum) pois o
30 FOR J-l TO 5
computador interpreta o valor numéri- 40 READ NS.TS
co 256, neste caso, como o cordão alfa- 50 IF NS-RS THEN PRINT AT 10
numérico "256". ,1;"0 numero de ";NS;" e ":TS
Em contrapartida, se o computador GOTO 80
:

tentasse Jer o cordão "RECIFE" e o 60 IF NS-"FIM" THEN PRINT AT


atribuísse à variável numérica N, pode- 10,3;RS;" NAO ESTA NA LISTA"
ria perceber o erro e responder com uma 70 NEXT J
mensagem tal como: "tipo inadequado" 60 PRINT AT 12,0;"Quer outro
TM, ou TYPE M1SMATCH), ou
(erro numero {S/N)7"
"dado incorreio" (erro BAD DATA, ou 90 PAUSE 0
INVAL1D DATA, dependendo do com- 100 IF INKEYS-"S" THEN GOTO 5
110 IF INKEYS-"N" THEN GOTO
putador); ou poderia supor que "RECI-
2000
FE" é um nome de variável não defini-
500 DATA "ZULEICA" "22-6400"
, ,

do anteriormente; sua resposta, neste MARIA" "33-7237". "MARCELO" ,"3


,

caso, seria uma mensagem de erro co- 4-4009" "RICARDO" ,"13-71824"


, ,

mo: "variável não encpnrrada". FIM". "FIM"


Outro erro comum é colocar itens a
menos em DATA.

UMA LISTA TELEFÓNICA 10 LOCATE 12 . 3 : PRINT"Li3ta tele


fOnica"
12 PRINT PHINT :

Eis aqui um programa que utiliza um


15 RESTORE
lavo para a leitura interna de dados, 20 INPUT"Digite O nome";R$
através das declarações READ
e DATA. 30 F0RJ-1TO5
É um programa muito simples para ela- 40 READ NS.TS
borar uma lista telefónica particular. 50 IFNS-8S THEN LOCATE 5,15:PRI
NT"0 número de ";NS;" é ";TS:GO
TO 80
60 IFN$-"END" THEN LOCATE 5.15:
PRINTRS;" n&o está na listai"
O programa abaixo roda apenas no 70 NEXT
e que você utilize variáveis e fun- TRS-Color. Para utilizá-lo nos micros 500 DATA ESTELA, 321054, JOSÉ .529
ções dentro de declarações DATA. TRS-80, modifique os números do 884, CELI. 326747. FERNANDO. 511934
PRINT nas linhas 50 e 60, para 640. .END.END
DATA "RECIFE" 256,3*5, SQH
, (n
5 CLS
No comando READ BS variáveis devem 10 PRINT è"70,"DIRETORIO TELEFON
ser colocadas mesma ordem que os itens
na
ICO"
relativos a DATA. A linha DATA acima
12 PRINT 5 HOME
pode ser lida com o comando: 20 INPUT "DIGITE O NOME";RS 10 VTAB 3: HTAB 12: PRINT "Lis
30 FOR J-l TO 5 ta telefónica"
READ AS.N.X.Y
40 READ NS.TS 12 PRINT PRINT :

A primeira variável é uma variável al- 50 IF NS-RS THEN PRINT §320. "0 20 INPUT "Digite o nome: ";RS
NUMERO DE ";RS;" E: ";T$:END 30 FOR J - 1 TO 5
fanumérica, para coincidir com o pri- '

meiro item de DATA. Mas os três itens 60 IF NS-"FIM" THEN PRINT «320, 40 READ NS.TS
RS;" NAO ESTA NA LISTA" 50 IF NS - RS THEN VTAB 15: H
seguintes são variáveis numéricas.
70 NEXT J TAB 5: PRINT "O numero de ";NS;
É fácil cometer erros quando se usa 500 DATA ALCINO. 384-4276. JÚNIOR " e ";TS: END
DATA em um programa. Os principais ,997-4036, RODRIGO, 52-5114, GERTR 60 IF NS - "END" THEN VTAB 15
problemas ocorrem quando não se pos- UDES 5666-99994 FIM FIM
. , , : htab 5: PRINT RS;" nao eata n
sui um número suficiente de itens ou a lista!"
quando se tenta ler com READ uma va- 70 NEXT J
riável de outro tipo, em DATA. Se a li- 500 DATA FERNANDO, 510536, MA
nha DATA acima tivesse sido digitada RILIA, 543286 JOAQUIM, 28999 ROB , . I

incorretamente, tal como DATA 256, ERTA. 719852, END. END


Você pode utilizar os nomes e os nú-
meros dos telefones dos seus amigos na
linha DATA e colocar íamos itens DA-
TA quanto desejar; mas não se esqueça
de ajustar o contador de laços na linha
30.
A lista de itens em DATA é finaliza-
da com as palavras FIM, FIM, para a
linha 60 checar se já foi alcançado o fim
da lista. Se o programa tiver lido a lista
em DATA até o fim, isso significa que
o nome não foi encontrado, e o progra-
ma imprimirá uma mensagem para di
zer isto a você. FIM (ou "FIM" no
Spectrum) deve ser entrado duas vezes
porque a linha 40 lê dois itens DATA
de cada vez.
Os cordões em DATA podem conter
espaços, mas não vírgulas Se você pre-
cisar entrar um cordão DATA com uma
vírgula, coloque o cordão entre aspas:

10 RE AD NS.ASlBS.CS
20 DATA JOSE DOS CAMPOS
"AU. BRASIL 23" .

CAMPINAS, 13100
A primeira linha do endereço deve ser
escrita entre aspas por causa da vírgula
depois de AV. BRASIL.

COMO USAR A DECLARAÇÃO REST0RE locar uma declaração REM após a linha
80 LOCATE 3,21:PRINT"Voce quer em que ela está, para lembrá-lo.
Com os métodos vistos alé agora, um outro numero? (S/N) " Com o comando RESTORE você po-
programa poderá ler uma lista de DA- 90 KS-INKEYS:IF KS-"" THEN 90 de reutilizar uma lista DATA sempre
TA apenas uma vez. a menos que você 100 IF KS-"S" THEN 5 que necessário. Ele é particularmente
o rode de novo. Para ler mais uma vez 110 END útil quando se quer ler várias vezes uma
o conjunto de itens em DATA você de- mesma lista de dados para pesquisar um
ve incorporar ao seu programa a decla- determinado item, como no caso do
ração RESTORE {restaurar, em inglês). programa para a lista telefónica.
Se você quiser consultar os números dos
telefones dos amigos sem rodar o pro-
APLICAÇÕES PARA DATA
grama, substitua END ou STOP na 90 GET KS
linha 50 por GOTO 80 e acrescente: 100 IF K$ - "S" THEN 5 As declarações DATA são úteis pa-

DQ O
programa listado abaixo roda ape-
110 END

Mas o que acontecerá quando você


rodar o programa? Na primeira vez, ele
ra todos os tipos de programa e você cer-
tamente já as utilizou em desenhos de
labirintos e outros efeitos.
Frequentemente, um grande número
nas no TRS-Color. Para utilizá-lo em funcionará bem. Mas, se você pressio- de linhas DATAé utilizado para conter
micros da linha TRS-80, modifique o nar uma tecla para outra repetição da todo o texto necessário a um jogo de
número do PR1NT na linha 80 para 832. consulta, ele falhará devido à falta de
aventuras, ou em programas aplicativos
mais itens em DATA. Mas existe uma simples. Pode-se também armazenar
80 PRINT e416."U0CE QUER OUTRO solução para o problema. Acrescente:
questionários com todas as perguntas e
NUMEROCS/N)?* respostas em linhas DATA. E os jogos
90 KS-INKEYS:IF KS THEN GOTO
1
16 RESTORE
de fliperama em BASIC as utilizam pa-
THEN GOTO 5
Desta vez o programa continuará ra definir tanto os caracteres como os
funcionando toda vez que se repetir, planos de fundo.
pois o comando RESTORE instrui o Programadores experientes empre-
computador a voltar ao início da lista gam DATA para linguagem Assembly
em DATA. E uma boa idéia colocar ou em programas em código de máqui-
80 PRINT AT 12,0; sempre uma declaração RESTORE no na (veja a primeira lição de Código de
numero (S/N)?" inicio de um programa que você estiver Máquina). Tais programas consistem de
90 PAUSE 0 desenvolvendo. Isso faz com que você um laço FOR...NEXT curto que lê os
100 IF INKEY$-"S" '
não fique sem nenhuma DATA, ao ten- códigos de máquina em uma lista DA-
110 IF INKEY$-"N" '
tar testá-lo. Se, mais tarde, você quiser TA e usa o comando POKE para inseri-
2000 remover a linha RESTORE, bastará co- los na memória.
IHIIIIIIIIIII
plicar para que serve cada grupo de de- uma linha em forma de arco a partir de
clarações DATA. cada ponto. A linha 30 significa: "de-
senhe até um ponto localizado 175 pi-
xels à direita do pixel inicial". O parâ-
metro -2,5 dá à linha sua forma curva,
evitando a linha reta.
O programa seguinte desenha uma casa:
100 FOR n-lB TO 39
10 CLS:COLOR 4,5 110 READ a
20 FOR A-0 TO 8 120 PLOT n,45
30 FOR B-l TO 17 130 DRAW 0,a
40 READ C 132 PLOT n+188,45
50 VPOKE (171+A*40)+B.C 134 DRAW 0,a
60 NEXT B 140 NEXT n
70 NEXT A 1000 DATA 70,70,67,67.70.70.60.
500 DATA 32,32,32,32,32,32,32,3 60,57,57,60,60,57,57,60,60,70,7
2,32,32,32,32,219,219.219,32,32 0,67,67,70,70
510 DATA 32,32,32,32,32,32,32,3 Esta é a seção que desenha as torres.
2,32,32,32,219,219,219,219,219,
32
O laço entre as linhas 100 e 140, mais
o número 45 (pixels da parte inferior da
520 DATA 32,32,32,32,32,32,32,3
tela), nas linhas 120 e 132, traçam os
2,32,32,219.219,219,219,219,219
,219 pontos na parte inferior de cada um dos
530 DATA 32.32,32,199,219,219,3 conjuntos de linhas verticais que defi-
2,32,32,32,32,222.219,219,219,2 nem a torre.
19,219 Então, as linhas 1 10 e 1000 assumem

540 DATA 32,32,199,219,219,219. o comando. A linha 1 10 diz ao compu-


219,32,221,32,32.219,219,219,21 tador para ler, na linha 1000, a altura
9, 219,32 (novamente em pixels) de cada uma das
550 DATA 32,32,215,215,215,215. 22 linhas verticais. Assim, a primeira li-
215,219,219,193,32,32,222,215,2 nha será 0,70 —
isto é, vertical e com
19,32,32 70 pixels de altura; a segunda linha será
Qualquer programa que contenha 560 DATA 32,32,215,16,215,202,2
0,70, a terceira 0.67 e assim por diante.
15.215.21,215,32,32,32,215,32,3
ou funções
textos padronizados, figuras Se você quiser ver o que está acontecen-
2,32
pode fazerum largo uso das listas DA- 570 DATA 32.32.215,215,215,202, do, tente inserir uma linha temporária
TA. Empregadas de maneira cuidado- 215.215,215,215,32,32,32,215,32 tal como 135 PAUSE 100 após a linha
constituem um poderoso
sa, essas listas ,32, 32 134.
instrumento de programação. 580 DATA 195,195,195.195,195,19 300 PLOT 0,75
5.195,195,195,195,195.195,195,1
310 DRAW 255,0-0.1
95,195,195,195 320 PLOT 0, 78
UTILIZE DATA PARA GRÁFICOS
330 DRAW 255,0.-0.1
Os números em DATA fornecem as
coordenadas das várias panes da casa (li- Essas linhas desenham a pista de ro-
As declarações DATA servem igual- uma
nhas 500 a 580). A parte principal do pro- lamento e -0. produz1 ligeira cur-
mente para programas de gráficos, pa- va para cima.
grama estabelece os laços FOR...NEXT pa-
ra definir coordenadas, desenhar ou
ra a leitura (comando READ na linha 40)
evocar caracteres gráficos predefinidos 400 FOR r-62 TO 182 STEP 20
das partes pertinentes em DATA e as dese-
na memória ROM. Sua utilidade, po- 410 PLOT r,78
nha, colocando os códigos de caracteres na
rém, diminui quando o que se quer é tra- 420 READ b
página de memória da tela, por meio do co- DRAW 0,b
çar formas regulares onde as coordena- 430
das ou o formato dos gráficos podem ser
mando VPOKE. 440 NEXT r
calculados. Um exemplo disso pode ser 1010 DATA 42, 55, 63, 65, 63, S5, 42
encontrado no programa para o TRS-
Essas, por sua vez, produzem os ca-
Color, onde os padrões repetitivos no
Este programa utiliza READ. ..DA- bos verticais entre o arco e a pista de ro-
topo das muralhas de um forte são cal-
TA para desenhar uma ponte. Se você lamento; o laço FOR... NEXT ajuda a
culados.
entrar o programa e rodá-lo em estágios, traçar as posições iniciais dos cabos, en-
As declarações DATA
no programa
será bem mais fácil ver o que está acon- quanto as linhas 420 e 1010 regulam as
abaixo foram deliberadamente divididas
tecendo, e assim verificar se o digitou suas fespectivas alturas.
em várias linhas. Assim, se você quiser corretamente: Se você quiser que o programa rode
examinar ou modificar o programa fu-
de novo, automaticamente, acrescente
turamente e achar os itens em DATA 10 FOR t-74 TO 80 STEP 3 essas linhas:
que correspondem às variáveis do pro- 20 PLOT 35,
grama, poderá seguir uma a uma as ins- 30 DRAW 175,0,-2.5
truções READ; mas para um programa 40 NEXT t
longo isto será muito cansativo. O me-
lhor será dividir as declarações DATA Este segmento do programa utiliza
A linha 5 limpa a tela e permite que

— o programa leia novamente o DATA.


em grupos, e se você quiser evitar a um laço FOR.. .NEXT para ajudar a
memorização de tudo o que está lá den- traçar três pontos próximos ao lado es-
tro —
utilizar comandos REM para ex- querdo da tela; em seguida, ele desenha
t

IIIIIIIIIIHHHMHII^HmMUHlIIIIIIII
programa, não será necessário um indi- mina com as linhas adicionais 590 e
TRABALHE COM INDICADORES RESTORE
cador: usar o RESTORE sem um núme- 600), o desenho será diferente do ame-
Até agora, o único problema com ro de linha é o mesmo que restaurar o rior.
DATA se resumiu a que a informação número da primeira linha DATA.
precisou sempre ser chamada na mesma Indicadores de restauração são mui-
sequência, começando do mesmo lugar. to úteis em programação de jogos. Nu-
Utilizando o RESTORE, é possível vol- ma aterrissagem, por exemplo, você po-
tar aoinício de uma lista, mesmo que deria escrever uma rotina para checar se
não setenha atingido o fim. Mas como houve uma colisão ou um pouso segu-
se salta para o meio de uma lista? ro. As listas DATA poderiam então 10 PCLEAR 4
Nos computadores das linhas Sinclair conter informações para gerar sons pa- 20 PMODE 4.1
30 PCLS 5
Spectrum e MSX, existe um modo para ra as duas alternativas, e o indicador
40 SCREEN 1,1
se responder a essa questão. Em vez de RESTORE serviria para indicar a lista 50 READ SX.SY
uma lista apenas, você pode utilizar vá- correta.
60 LINE - (SX.SY) , PSET
rias, direcionando assim o computador Outra vaniagem do RESTORE inde- 70 FOR K-l TO 18
para a lista adequada. Tente acrescen- xado pára definir os elementos de uma 80 READ X.Y
tar essas linhas extras ao programa pa- figura é que fica bem mais fácil acres- 90 LINE -tX.Y) PRESET ,

ra o Spectrum: centar novos elementos a um desenho 100 NEXT K


terminado; se quisermos adicionar um 270 GOTO 270
muro à casinha da ilustração abaixo, 500 DATA 64. 160
bastará colocar mais linhas DATA: 510 DATA 64,60.32.60,48,40,64.6
0,32,60,32.160,110,160.110,120
6 INPUT "PONTE ANTIGA OU MOD 520 DATA 152,120.152.160,228.15
ERNA?" ; yS 0,228,60.212,40.196,60,228,60
7 IF yS-"a" THEN RESTORE 530 DATA 196.60,196,160.196,74
1000
8 IF yS-"m" THEN RESTORE As linhas de 10 a 40 deixam a tela pa
ra gráficos de alta resolução pronta pa
2000
9 IF y$<>"a- AND y$<>"nT 90 IFINKEYSO" "THENRESTORE520 G :
ra desenhar. A linha 270 a manté
THEN GOTO 5 OTO10:ELSEGOTO90 gada. As linhas 50 e 60 são um tanto in
10 FOR t-74 TO 80 STEP 3 590 DATA 203,203,203,203,203,20 comuns. As coordenadas do ponto im
20 PLOT 35, 3,203,203,203,203,203,203.203,2 ciaido castelo são lidas, e uma Einha em
30 DRAW 175,0,-2.5 03,203.203,203 branco é desenhada em fundo branco
40 NEXT t 600 DATA 203,203,203,203,203,20 para o ponto inicial. Algumas vezes, es-
2000 DATA 83,84,85,86.87,88,89. 3,203.203,203,203,203,203,203,2 sa capacidade para desenhar linhas "in-
90,90.90,90,90,90.90,90,89,88,8 03.203.203,203 visíveis" [orna-se bastante útil, pois elas
7,66.85.84,83 podem se juntar às linhas visíveis em um
2010 DATA 42,55,63,65,63,55.42 Feito o desenho, o computador per-
guntará se você quer uma casa com mu- esquema contínuo de programação.
Os números que seguem o comando ro. Se você pressionar qualquer tecla, o Da linha 70 à 100, é desenhado o con-
RESTORE são conhecidos como indi- comando RESTORE 520 na linha 90 in- torno do castelo. No final desta pane do
cadores de RESTORE. Eles direcionam dicará, para a próxima execução do pro- programa foram lidos 38 itens de DA-
o computador para uma lista DATA. grama (a partir da linha 10), que as li-
TA. Agora acrescente essas linhas e
No programa acima, se você pressionar nhasDATA lidas pelos comandos construa algumas muralhas:
a tecla O. o indicador RESTORE será READ na linha 40 deverão começar na 110 FOR K-l TO 33
definido com o 1000, na linha 7. linha 520, e não em 500, que é o seu iní- 120 LET X-X-4
Se você quiser que o micro vá para cio físico. De acordo com uma nova se- 130 LINE- (X Y) PRESET
, .

a primeira lista DATA disponível no quência de caracteres gráficos (que ter- 140 IF Y-74 THEN LET Y-78 ELSE
IIIIIIIIIHIHHHiMIMMHHHIIIIIIIII
LET Y-74
150 LINE -<X,Y) . PRESET
160 NEXT K
Desenhar uma casinha nos micros da
Provavelmente você está tentando linhaApple é facílimo _quando utiliza-
adivinhar o que aconteceu à linha mos DATA. Digite o programa abaixo:
READ. Esta é uma ocasião em que as
instruções DATA e READ não repre- 10 HGR
sentam economia de trabalho, pois vo- 20 HCOLOR-3
cê precisaria de 66 itens de DATA para 30 FOR 1-1 TO 4 ORGANIZE MELHOR OS COMANDOS
definir os cantos da muralha. Progra- 40 READ XC.YC.LX.LY DATA EM UM PROGRAMA
mando desta forma, você não precisará
50 HPL0T XC.YC TO XC+LX.YC TO As linhas DATA tém quase sempre
DATA extras.
XC+LX.YC+LY TO XC.YC+LY TO uma coisa em comum: qualquer que
digitar todas as tinhas
XCYC seja a informação que elas transpor-
Essas linhas desenharão as janelas: 60 NEXT I tam, leva-se muito tempo para digitá-
170 FOR K-l TO 8 BO FOR 1-1 TO 3 las e fazê-las funcionar. Tudo correrá
180 READ X.Y 90 READ XO.YO.XD.YD bem na primeira vez, mas pode ser que
190 LINE (X,V) - {X+4 Y) PRESET. , 100 HPLOT XO.YO TO XD.YD você precise retornar posteriormente a
200 LINE <X+2.Y-2)-(X+2.Y+6) ,PR 110 NEXT I um programa e não consiga entender
ESET 400 DATA 20.50,160,80 mais nada do que foi colocado lá.
210 NEXT K 410 DATA 90,80,20,50 Organizar sistematicamente as li-
540 DATA 46,80.46,120,210,80,21 420 DATA 40.80,30,30 nhas DATA do programa toma apenas
0,120,86,90,170,90,80.132,178,1 430 DATA 130.80,30.30 um pouco mais de (empo, mas pode
32 440 DATA 0.50,200,50 poupar séculos no resultado final.
Você não precisa do DATA
para fi-
450 DATA 200.50,100,0 Onde o DATA definir um gráfico por
460 DATA 100,0,0,50 biocos ou algo parecido, organize as li-
nalizar as janelas. Como são todas
elas
nhas do programa para corresponder
do mesmo tamanho, apenas um conjun- Os elementos cm DATA fornecem as diretamente às linhas do gráfico. Se o
to de DATA é necessário. Acrescente coordenadas para as diferentes partes da DATA segue um formato repetitivo (ta)
agora essas linhas, rode o programa e casa. como os dados em uma lista telefóni-
veja o que acontece: A parte principal do programa liga o ca, por exemplo), classifique cada en-
220 FOR K-l TO 4000 modo de alta resolução gráfica (HGR) trada exatamente do mesmo modo nas
230 NEXT K DATA linhas do programa.
e lê os dados contidos em por in-
240 CLS: PB I NT 833, "PRESSIONE Q termédio do laço FOR. ..NEXT nas li-
UAL0UER TECLA PARA CONTINUAR"
nhas 30 a 60 e 80 a 110.
250 LET INS-INKEYS-IF INS-"" TH DATA comprimento do lado paralelo ao eixo
EN GOTO 250
Os dados contidos nas linhas
horizontal (LX) e o do lado paralelo ao
270 GOTO 30 que vão de 400 a 430 contêm quatro nú-
eixo vertical (LY). Assim, o laço
Quando você pressionar uma meros cada e servem para traçar relân-
tecla FOR. ..NEXT das linhas 30 e 60 lê su-
gulos de qualquer tamanho e em qual-
qualquer, obterá OD ou a mensagem de
quer posição na tela (rotina HPLOT na
cessivamente quatro conjuntos de dados
erro "out of data". A razão disso é que e traça os quatro retângulos.
linha 50). Essa estratégia é vantajosa,
o programa chegou ao final da lista DA- Já o traçado do triângulo exige uma
TA — não existe mais nenhuma depois
pois você pode notar na ilustração que
a casa tem no mínimo quatro retàngu-
técnica diferente. O laço que vai das li-
dele. Mas você não precisa digitar todos nhas 80 a 110 lê 4 valores: XO, YO
los diferentes (a casa, a porta e as duas
os DATA novamente. Acrescente só es- (coordenadas de origem de uma reta) e
janelas). Assim, os dois primeiros nú-
ta linha, que utiliza a declaração RES- XD, YD (coordenadas do seu ponto fi-
TORE para instruir o computador a re- meros em DATA são as coordenadas
nal), e traça essa reta, na linha 90.
[ornar ao início da lista DATA:
XC e YC do ponto de origem do retãn- Uma vez que você tenha rodado o
gulo na tela (seu canto superior esquer-
programa, talvez queira repeti-lo mais
260 RESTORE do). Os dois números seguintes são: o
uma vez. Para isso, tente acrescentar as
linhas seguintes, rode o programa e ve-
ja o que acontece:

120 HOME
130 PRINT "QUER VER DE NOVO
(S/N) ?" GET RS :

140 IF RS-"N" THEN TEXT END :

150 GOTO 10
Como vimos antes, se você pressio-
nar uma tecla qualquer obterá OD ou
a mensagem de erro "out of data". A
razão disso é que o programa chegou ao
final da lista DATA. Felizmente, você
não precisa digitar todos os DATA no-
vamente. Apenas acrescente a linha se-
guinte, que utiliza a declaração RESTO-
RE para instruir o computador a retor-
nar ao inicio da lista DATA:
150 RESTORE :G0T0 10
4 APIICAÇÕIS 4

PONHA ORDEM EM Assim como os grandes computadores


comerciais, seu micro pode ser

usado para fazer cálculos e manter

SUAS CONTAS registros financeiros. Veja

fazer isso e facilite sua vida.


como

Neste artigo, examinaremos um pro-


grama de contabilidade doméstica, que
foi planejado para fornecer respostas a
perguntas como: onde foi parar o di-
nheiro do salário? São apresentadas ver-
sões para todos os computadores, com
exceçào dos compatíveis com o ZX-81
Para atualizar a sua contabilidade,
você deve "alimentá-la" uma vez por
mês com seus rendimentos .e despesas.
O
programa cria uma espécie de diá-
rio contendo uma coluna para os rendi-
mentos e sete colunas para as despesas
sob diferentes rubricas. As subdivisões
referentes às despesas podem ser modi-
ficadas, caso necessário; para isso, al-
tere os dizeres (identificação das
categorias de despesa) na declaração
DATA pertinente, quando digitá-las,
junto com o programa. Mas existem al-
gumas limitações: a coluna de rendimen-
tos deve aparecer sempre em último
lugar; ao mesmo tempo, é necessário
que haja um total de oito colunas.
O programa deve ser digitado em
duas seções: a primeira, com o próprio
programa; e a segunda, com todas as in-
formações com as quais você o alimen-
tou até o momento da sua entrada. Isto
significa que você precisará de dois no-
mes para os programas.
Para gravar corretamente o progra-
ma em fita, siga o procedimento normal
de sua máquina (comando SAVE ou
CSAVE). Para recarregar o programa,
siga novamente o procedimento usual
para carregar jogos gravados em fitas.
Quando você rodar o programa, o
menu principal lhe dará sete opções:
1 - Entrar dados
2 - Ver dados
3 Gravar em fita
-

4 Carregar da fita
- por um novo dado e pressione <EN- mostrará a questão "Continua?" se ho-
5 Imprimir
- TER> ou < RETURN >, trazendo de ver espaço insuficiente para exibir todos
6 • Alterar um dado volta o menu. os lançamentos de uma vez. Neste caso,
7 - Encerrar o programa Para examinar um lançamento, pres- não pressione o N nesse pomo: prossi-
Para fazer um lançamento, pressio- sione a tecla 2 quando o menu princi- ga até o final da listagem.
ne a tecla quando o menu principal
1 ENTER > ou
pal aparecer. Não tecle < Quando terminar, acione < EN-
aparecer. Não acione ainda <EN- < RETURN >. O computador exibirá TER > ou < RETURN > e voile ao me-
TER> ou < RETURN > A cada lan-
. um índice mostrando as várias catego- nu principal-
çamento, o computador pedirá detalhes rias. Para selecionar uma delas digite o
como data, descrição, valor e categoria. número apropriado (não tecle < EN- COMO MODIFICAR UM LANÇAMENTO
Digite a informação na ordem dada, TER > ou < RETURN > , e o micro lis-
pressionando < ENTER > ou < RE- tará os lançamentos que existem para
TURN > após cada dado do lançamen- aquela categoria. Quando você teclaro 6 para a opção
to. Espere que o computador pergunte Na versão para o Spectrum, a tela de alterar um lançamento, o computa-
: : : 1, ; ) (

4 APLICAÇÕES 4

m DIGITE E ARMAZENE 0 ATUALIZE OS REGISTROS


PROGRAMA VERIFICAÇÃO DO BALANÇO
AS OPCOES DO MENU IMPRESSÃO DOS RESULTADOS
COMO ENTRAR LANÇAMENTOS ARMAZENE SUAS FINANÇAS
NOS REGISTROS EM FITA

tão simples quanto um interruptor de 1060 GOSUB 1250 LINEINPUT-ITEM :

luz — um liga/dtsliga acionado quan- ?";TEStNU) :IF LEN (TES (NU) )>25 T
HEN 1060
do se tecla a opção 5 (também sem
1070 AS-LEFTS (TES (NU) 9} PRINTê
< ENTER > ou < RETURN > ) do me-
, :

L+14-LEN(AS)/2.A$;
nu principal. O computador pedirá que 1080 GOSUB 1250:INPUT"QUANTIA "
você tecle S, se quiser usar a impresso- ;A
ra, ou N se não quiser. Se você pressio- 1090 IF A>9999999 OR A<0 THEN 1
nar a tecla S, o menu principal voltará oeo
automaticamente à tela e, a partir desse 1100 PRINT 6L+19.USING U2S;A;:A
momento, tudo o que normalmente apa- M (NU) -A
receria na tela, usando-se a opção 2, 1110 GOSUB 1250:INPUT"CATEGORIA
";CA$
passará a ser mandado para a impres-
1120 GOSUB 1180:IF F-0 THEN 111
sora. Se quiser interromper essa opção, 0
pressione a tecla 5 novamente e respon- 1130 CA<NU)-NM:PRINT 6L+29. LEF
da N. TS (CTStCA(NU) ) .3}
Se você não tiver uma impressora co- 1140 IF NM08 THEN GT-GT+A
nectada ao computador, tome cuidado 1150 NU-NU+1: L"L+32:IF L-448 T
para não pressionar a lecla S. O Spec- HEN 1000 ELSE 1020
trum irá ignorar as instruções neste ca- 1160 L-64: PRINT 62 "DATA" TAB .

10)-ITEM" TAB(19) "QUANTIA" TAB


so, mas em qualquer um dos outros três
(29) -CAT";
computadores você poderá perder todas 1170 RETURN
as informações já inseridas. 1180 IF VAL(CAS)<>0 THEN 1230
1190 F-0:FOR N-l TO 8
1200 IF CAS-LEFTS (CTS IN) LEN (CA ,

S)) THEN F-F+1:NM-N


10 PMODE 0:PCLEAR 1 CLEAR 10000 r
1210 NEXT: IF FM THEN F-0
20 DIM TES (200) AM (200} DAS (200 , ,
1220 RETURN
) ,CTS<8) ,CA(200) 1230 IF VAL(CAS)>8 THEN F-0 RET :

30 FOR N-l TO 8 BEAP CTStNI :NEX URN


T 1240 NM-VAL (CAS) F"l RETURN : :

40 DATA MANUTENÇÃO DA CASA. LAZE 1250 PRINT 6448," ": PRINT 6449.
H ALUGUEL VESTUÁRIO AUTOMÓVEL
. , ,
1 RETURN
:

FERIAS OUTROS RENDA


, .
2000 CLS3:FOR N-l TO 8
50 lllllllll. 1 1 1 I 1 2010 PRINT 669+N*32,N;MIDS("- "
II.
" +CT$(N1+STRINGSU2." "),1,20);
60 CLS4 PRINT #8 "MENU PRINCIP
!
,
2020 NEXT
AL";: PRINT 670, "1- ENTRAR DADOS 2030 TT-0: PRINT #449. "QUE CATE
";:PRINT §134, "2- VER ENTRA GORIA ?";
DAS ";:PRINT «198. "3- GRAVAR 2040 AS-INKEYS:IF AS<"1" OR AS>
EM FITA "8" THEN 2040
"f
70 PRINT 6262, "4- CARREGAR 2050 NM-VAL (AS)
"
i
'PRINT 6326, "5- IMPRIMIR 2060 IF PT-1 THEN PRINTI-2 CHRS .

";: PRINT 6390, "6- MUDAR E (13) :PRINT|-2,TAB(21-LEN(CTS(NM


NT RADA "::PRINT 6454, "7- SAID ))/2) ;CTS(NM) :PRINT|-2," DATA"
A " TAB 20) " ITEM" TAB (39) "QUANTIA"
dor mostrará uma lista com todos os
(

80 AS-INKEYSrlF AS<"1" OR AS>"7 2070 GOSUB 2280


lançamentos já efetuados. 2080 FOR NN-0 TO NU
" THEN 80
Você pode se movimentar para trás 2090 IF CA (NN) ONM THEN 2150
90 ON VAL (AS)GOSUB 1000,2000.3
e para a freme dentro da lista, utilizan- 000.4000.5000.6000.7000 2106 IF PT-1 THEN PRINT|-2 USIN ,

do os sinais de prontidão que aparece- 100 GOTO 60 GFS DAS (NN) TES (NN) AM NN
; ; ; {

rão na tela. O computador também dirá 1000 CLS: IF NU>200 THEN PRINT 2110 PRINT 6L.DASINN) AS-LEFTS
como editar (modificar) um lançamen- 6264 "MEMORIA LOTADA " PLAY "T
,
!
:
(TES (NN) ,13) PRINT 6L+16-L£N(AS
:

to. Uma vez que você tenha digitado 10ABCDEFGP1P1" RETURN :


)/2 AS , PRINT 6L+23.USING U2S:A
; :

< ENTER > ou < RETURN >, após 1010 GOSUB 1160 M (NN) TT-TT+AM (NN)
: ;

1020 GOSUB 1250:INPUT"DATA " DA 2120 L-L+32:IF (L-448 AND NM<>6


fazer a alteração, o computador trará de ;

S (NU) ) OR ÍL-352 AND NM-8) THEN PRIN


volta o menu principal. Para uma segun- T 6465. "CONT ?";ELSE GOTO 2150
1030 IF DAS(NU)-"" THEN RETURN
da alteração, você deve selecionar a op- 1040 IF LEN(DAS<NU))>§ THEN 102 2130 A$-INKEYS:IF AS-"" THEN 21
ção 6 novamente. O comando para a 0 30 I
opção de impressão funciona de forma 1050 PRINT 6L.DAS(NU) 2140 GOSUB 2280
6035 KKS-INKEYS:IFKKS-""THEN603
5
6040 IF KKS-CHRS (8 AND M>0 THE )

N M-M-l :GOTO 6080


6050 IF KKS-CHRS (94) AND M<NU-1
THEN M-M+1:GOTO 6080
6060 IF KKS-CHRS 32 THEN 6100 ( )

6070 GOTO 6035


6080 PRINT§64 USING" t . i %

Ill

l Í";DAS[M) i

LEFTS (TES (M) .8) AM (M) LEFTS (CTS


; ;

{CA(M> ) 3) ,

6090 GOTO 6035


6100 IF CAlM)<>8 THEN GT-GT-AM(
M)
6110 INPUT"NOVA DATA ";DS:IF DS
-"" THEN 6130
6120 IF LEN(DS)>8 THEN 6110 ELS
E DAS (M) -DS
6130 INPUT "NOVO ITEM ";DS:IF D
S-"" THEN 6150
6140 TES (M) -DS
6150 INPUT "NOVA QUANTIA ";A:IF
A-0 THEN 6170
6160 IF A<0 OH A>9999999 THEN 6
150 ELSE AM (M) -A
61/0 INPUT "NOVA CATEGORIA " CA ;

S IF CAS-" " THEN 6200


!
2150 NEXT ! IF PT-1 THEN PRINT»-
2.CHRSU3): IF NM<>8 THEN PRINT 3040 CLS: PRINT §65 INPUfNOM ; :
6180 GOSUB 1180:1F F-0 THEN 617
.

»-2.TAB(28) : :PRINT#-2,USING"TOT E DO ARQUIVO " DAS ;

AL -"+U1S;TT 3050 OPEN "O". DAS


2160 PHINT Í463.USING "TOTAL 3060 PRINT 1-1, NU
+U1S;TT; 3070 M)
FOR N-0 TO NU-1
3080 PRINT | - 1 DAS (N| TE$ (N) AM 6210 RETURN
2170 IF MM<>8 THEN 2250 , , .

7000 CLS: PRINT §69. "VOCE TEM C


2180 IF PT-0 THEN 2220 (N) ,CA(N)
3090 NEXT CLOSE#-l RETURN ERTEZA [S/N) ?
2190 PRINTf-2.TAB(21) :PRINT|-2 ;
! ;

7010 AS-INKEYS:IF ASO"S" AND A


,<JSING"RENDA TOTAL -"+U1S:TT 4000 CLS: PRINT §65 INPUT"NOM
, ; :

E DO ARQUIVO"; DAS 5<>"N" THEN 7010


2200 PRINT #-2 ,TAB (16) PRINTt- ; :

7020 IF A$="N" THEN RETURN


2 USI.NG" DESPESA TOTAL
. -"+U1S;GT 4010 MOTORON PRINT §64,"POSICIO
:

iPRINTI-2 .TAB (35) " " NE O GRAVADOR E TECLE <ENTER


>"
2210 PRINTI-2.TAB [26) :PRINT#~2 ;

,USING"BALANCO -"+U1S;TT; 4020 AS-INKEYS:IF AS-"" THEN 40


2220 PRINT §392.USING "RENDA TO 20 50 LET mn=200: IF PEEK 23733-
TAL - - +U1$;TT; 4030 MOTOROFF:GT-0:OPEN "I",#-l 127 THEN LET tnn-100
2230 PRINT §419,USING "DESPESA ,DAS 100 DIM cS(8.16): DIM a (mn)
TOTAL -"+U1S;GT; 4040 PRINT §129, "ACHEI ";DAS DIM aS(mn,23)
2240 PRINT §461.USING"BALANCO = 4050 INPUT 1-1 NU ,
110 LET u-0: LET V-l
"+U1S;TT-GT ; 4060 FOR N=0 TO NU-1 120 FOR n=v TO 8: READ CS ín) :

2250 A$-INKEYS:IF AS-"" THEN 22 4070 INPUT t-1 DAS (N) .TE$ (N) AM
. .
NEXT n
50 (N) ,CA(N) 130 POKE 23659.8
2260 IF ASOCHRSU3) THEN 2000 4080 IF CA(N>08 THEN GT=GT+AM ( 140 LET kS="-00": FOR n-v TO 7
2270 RETURN N) 145 LET kS-kS+CHRS 8: NEXT n
2280 L-64:CLS NM PRINT § (33-LEN : 4090 NEXT CLOSE |-1: RETUHN
: 190 LET p-2: LET tt-u: LET cr-
(CTS(NM) /2,CTS(NM)
) ) ;
5000 CLS: PRINT §65. "VOCE QUER
2290 PRINT §34 "DATA" PRINT «4,
; : IMPRIMIR 7 IS/N) " 200 CLS PRINT BRIGHT v:
:

5 "ITEM"
,
PRINT §56 "QUANTIA" ,
5010 AS-INKEYS: PAPER 2; INK 6 AT 2.1:" M r E N
; :

2300 FOR N-32 TO 416 STEP 32 SO"N" THEN 501 U PRINCIPAL"


2310 POKE N+1032 122+NM*16 POKE , : 5020 PRINT "OK" IF AS-"N" THEN 210 PRINT BRIGHT v; PAPER 7;
N+1046, 117+16*NM PT-0: RETURN AT 5,4:" 1- ENTRAR REGISTRO ";
2320 NEXT RETURN: 5030 FS-"Í tt AT 7,4;*' 2- VER REGISTROS "l
3000 CLS :MOTORON PRINT §64 " POS :
.

( +U2$:PT=1:RETU AT 9,4;" 3- GRAVAR EM FITA ";


ICIONE O GRAVADOR E PPESSIONE<E RN AT 11.4;" 4- CARREGAR
NTER>" 6000 IF NU-0 THEN RETURN AT 13,4:" 5- IMPRIMIR
3010 AS-INKEY$:IF AS-"" THEN 30 6010 CLS: PHINT" DATA"TAB (11)" AT 15.4;" 6- MUDAR REGISTRO
;

10 ITEM"TAB (19) "QUANTIA" TAB (29) "CA " AT 17,4;"; 7- SAÍDA


3020 MOTORO FF PRINT §65."PRESSI
:

ONE REC NO GRAVADOR


' ' E TEC 6020 PRINT §41 7 "PRESSIONE <";C
.
220 PRINT INK 3; FLASH v;
LE <ENTER>" HR$(94):"> PARA PROSSEGUIR BRIGHT v;AT 20,4;" - SELECIONE
138 3030 AS-INKEYS:IF AS-"" THEN 30 OU <" ;CHRS (95) "> PARA RETORNAR
;
OPCAO - "
4 APLICAÇÕES 4

"
230 IF INKEYS- " THEN GOTO 2510 IF Z$<>"8" THEN GOTO 2590 5020 LET ZS-INKEYS
230 2520 LET tz-tt*100: LET nS-STRS 5030 IF zS-"n" THEN LET p-2; R
240 LET zS-INKEYS: IF zS<"l" tz: PRINT '|p;TAB 4;"DESPESA T ETURN
OR zS>"?" THEN GOTO 230 O TAL- " TAB 29;kS;TAB 31-LEN nS
; 5040 IF ZS-"S" THEN LET p- 3 R :

250 CLS GOSUB 1000*VAL zS


i ;tt ETURN
260 GOTO 200 2530 LET ba-!t-tt)"100: LET nS- 5050 GOTO 5010
1000 LET c-u STRS ba: PRINT #p;TAB 10 "BALA- ;

6000 LET C-v: IF a(c)-u THEN D


1005 LET c-C+v: IF c-mn+v THEN NCO- " TAB 29;kS;TAB 31-LEN nS
; ETURN
RETURN ba/100 6010 PRINT AT u.u; BRIGHT v; PA
1006 IF aSíc.v)-" " THEN GOTO 2590 PRINT PAPER 2; INK 7'"Pre PER (VAL aS(c,v))-v; INK 9;" Nu
1010 asione qualquer tecla para co ero "sccSlVAL aS(c.v)) ,-
1007 GOTO 1005 ntinuar" 6015 PRINT PAPER 2; INK 7; "D
1010 PRINT AT U,u; BRIGHT v; PA 2600 PAUSE U: IF PEEK 23560-13 ATA ITEM QUANTIA
THEN RETURN ": PRINT 'aS(c,2 TO 9);TAIÍ 10;a
PER 2; INK 7;" DATA ITEM
QUANTIA CAT " 2610 CLS GOTO 2000 : S (c 10 TO 23)
, ;

1015 IF c-mn+v THEN RETURN 3000 GOSUB 8000: IF re=v THEN 6020 LET am-a <c) "100 LET nS-ST
:

1020 INPUT "Digite a data"; LIN RETURN RS am: PRINT TAB 29;k$;TAB 31-L
E aS(c,2 TO 9) IF aS(C,2)-"
:
" 3010 PRINT PAPER 6;AT 1 0 u " D . ; EN nS;a[c)
"
THEN RETURN igi te o nome do arquivo data 6030 PRINT PAPER 3; INK 7 AT Z
;

1030 PRINT TAB u;aS(c.2 TO 9); 3015 INPUT LINE wS IF LEN WS> :
0,uj" A - Prossegue Q - Retoi
1040 INPUT "Digite O item "; LI 10 OR LEN wS<v THEN GOTO 3010 na EDIT para alterar fe
NE a$(c,10 TO 23): IF aS(c,10)- 3020 CLS SAVE wS DATA a!)
: SA :

" " THEN 'GOTO 1040 VE WS DATA aS(i RETURN :


6040 PAUSE U
1050 PRINT TAB 9;aS(c,10 TO 21) 4000 GOSUB 8000: IF re-v THEN 6050 IF INKEYS-"q" AND c.v TH EH
HETURN LET c-C-v: GOTO 6010
Í060 INPUT "Quantia ";a(c): IF 4010 PHINT BRIGHT v AT 10,u;"D ; 6060 IF INKEYS- "a" AND cOan TH
a(c)-U THEN GOTO 1060 igite o nome doa dado3 a serem EN LET c-c+v
1070 LET vv-a(c)*100: LET v$-5T carregados"; INPUT LINE wS. IF 6070 IF a(c)-u THEN LET c-c-v
RS vv: PRINT TAB 27-LEN vS;a(c) LEN wS>10 THEN GOTO 4010 6080 IF PEEK 23560-7 THEN SOTO
4020 PRINT PAPER 3; INK 7 AT 1 ; 6100
1080 INPUT "Categoria "; LINE f 0,u;" Pressione PLA 6090 GOTO 6010
S: IF fS-"" THEN GOTO 1080 Y 6100 INPUT BRIGHT v;"Digite a
1090 FOH n-v TO 8: IF f$-c$(n,v 4030 LOAD uS DATA a() LOAD US : nova data "; LINE aSlc.2 TO ")
TO LEN fS) THEN GOTO 1130 DATA aSO IF aS(c,2)-" " THEN GOTO 6100
1100 NEXT n: GOTO 1080 4040 LET cr-u: LET tt-u: FOR n- 6110 PRINT AT 5,u;aS(c.2 TO 9)
•" THEN 6120 INPUT BRIGHT v;"uiglte o
1130 IF n-8 THEN LET cr-cr+a(c TO IF aS ín,v)
l

)
ET I a(n) novo item "i LINE aSíc.lO TO 23
1140 IF n<>8 THEN LET tt-tt+a( 4050 IF aS(n,l)<>"8" THEN LET ): IF aS(c.lO)-" " THEN GOTO b
c) tt-tt+a (n) 120
1150 PRINT TAB 29;cS{n.v TO 3) 4060 NEXT n: RETURN 6130 PRINT AT 5,10;aS(c,10 TO 2
1160 LET a$(c.v)-CHRS (48+n) 5000 PRINT BRIGHT v;AT 10, u;" 3)
"
1200 LET C-C+V: GOTO 1015 Voce quer imprimir (S/N) ? 6135 IF aS(c.v)-"8" THEN LET c
2000 FOR n-v TO 6: PRINT PAPER 5010 PAUSE u: IF INKEYS="" THEN
V: INK 7;AT n«2 4 " ";n;"- " c
,
;
;
GOTO 5010
S(n) : NEXT n
2010 PRINT FLASH v; INK 2 AT ; 1
9,3;"* Selecione categoriad a 8
"
)

2020 IF INKEYS-"" THEN GOTO 20


20
2030 LET ZS-INKEYS: IF ZS<"1" O
R z$>"8" THEN GOTO 2020
2040 LET t-u: LET C-U
2050 CLS PRINT #p PAPER 6; B
: ;

RIGHT v TAB 10;cS(VAL zS);TAB 3


;

"
t;"
2055 LET c-c+v: IF c'-mn THEN G
OTO 2500
2060 IF aS(C.v)-" " THEN GOTO
2500
2070 IF aS(c,v)Oz$ THEN GOTO
2055
2060 PRINT *p;a$(c.2 TO 9);TAB
10;aS(c,10 TO 23)
2090 LET am-a(C)"100: LET nS-ST
RS am: PRINT |P;TAB 29;kS;TAB 3
1-LEN nS;a(c)
2100 LET t-t+a(c)
2110 GOTO 2055
2500 PRINT »p;TAB 25;" *!
LET tx-t*100: LET nS-STRS tx
2505 PRINT #p;TAB 12;"TOTAL- ";
TAB 29;k$;TAB 31-LEN nS ;
" 1 ; A(
)

4 APLICAÇÕES 4

tt-tt-a !c) 60 CLS LOCATE7 2 : PRI NT" M E N U


PRINCIPA
: ,

6140 INPUT BRIGHT v; 'Digite no L":LOCATE10,6 "quantia";TAB<36


va quantia ";a(c>: IF a(c)-u TH :PHINT"1:- ENTRAR DADOS" LOCATE :
)
"cat";
EN GOTO 6140 10,8:PRINT"2:- VER DADOS":LOCAT 1170 RETURN
6150 LET am-a(c)*100: LET nS-ST E10,10:PRINT"3:- GRAVAR NA FITA 1180 IFVAL(CASX>0THEN1230
PRINT AT 5,29;ltS;TAB 31- 1190 F-0:FORN-1T08
LEN a (c) :
70 LOCATE10 12 PRINT"4 - CARREG
, :
:
1200 IFCAS-LEFTS (CTS (N) LEN [CAS .

6160 INPUT BRIGHT v;"Digite a AR DA FITA":LOCATE10.14:PRINT"5 )


JTHENF-F+l :NM-N
nova categoria ": LINE fS: IF f :- OPÇÃO DE IMPRESSÃO" LOCATE10 : 1210 NEXT: IFF>lTHENF-0
S-"" THEN GOTO 6160 .16 PRINT"6 - ALTERAR DADOS": LO
:
:
1220 RETURN
6170 FOR n=v TO 8: IF fS-cS(n,v CATE10,18:PRINT"7:- FIM DE PROG 1230 IFVAL (CAS) >STHENF-0 RETURN :

TO LEN f$> THEN GOTO 6190 RAMA" 1240 NM-VAL (CAS) F-l RETURN : :

6180 NEXT n: GOTO 6160 60 LOCATE10 22 PRINT"-ESCOLHA U


. : 1250 LOCATE0.20:PRINTSPACES!79)
6190 LET aS(c,v)-CHRS (48+n) MA OPÇÃO- ; :LOCATE0,20:RETURN
6200 IF n-8 THEN LET cr-cr+a(c 90 AS-INKEYS:IFAS<"l"ORAS>"7"TH 2000 CLS:F0RN"1T08
)
EN90 2010 LOCATE10.2*N+3:PRINTN;":-
6210 IF n<8 THEN LET tt-tt+a(c 100 ONVAL(AS)GOSUB1000, 2000. 300 " ;CTS(N)

)
0,4000.5000.6000,7000 2020 NEXT
6220 RETUHN 110 COLOR 15,4,4:GOTO60 2030 TT-0 LOCATE1S 23 PRINT"Qua
: , :

7000 G05UB 8000: IF re-v THEN 1000 CLS IFNU>200THENLOCATE10


: . 1 categoria? ";
RETURN 5 PRINT "MEMÓRIA CHEIA!":BEEP
: 2040 A$-INKEYS:IFAS<"1"0RAS>"8"
7010 RAND USB u 1010 GOSUB1160 THEN2040
8000 PRINT PAPER 4;AT 10,9;" V 1020 GOSUB1 250 INPUT "DATA " DAS : ;
2050 NM-VAL (AS)
oce tem certeza? " (NU) 2060 IFPT-1THENLPRINTTAB (40-LEN
8010 PAUSE ti: LET re*u: IF INKE 1030 I FDAS (NU) - " "THENRETURN (CTS(NM))/2) ;CTS(NM) LPRINTTAB :

Y$<>"s" THEN LET re-v 1040 IFLEN (DAS (NU) >8THEN1020 I


10)" DATA" TAB 28) ;"ITEM";TAB( ; (

51} "QUANTIA"
;

8020 RETUBN 1050 LOCATE0 L PRINTDAS (NU) . :

9000 DATA "MANUTENÇÃO CASA" " LA


.
1060 GOSUB1250:LINEINPUT"ITEM 7 2070 GOSUB2280
2ER", "ALUGUEL E TAXAS" "VE5TUAR
.
" ;TES(NU) IFLEN (TES (NU) ) >25THEN
;
2080 FORNN-0TONU
IO" "AUTOMÓVEL " " FERIAS " "OUTRO
. , .
1060 2090 IFCA (NN) ONMTHEN2150
S" "RENDA"
.
1070 A$"LEFTS (TES (NU) ,15) LOCAT :
2100 IF PT-1 THEN LPRINTTAB (10
E17-LENÍAS) /2 L PRINTAS . :
; DAS (NN) TAB (22) :TES (NN)
; LPRIN ; :

1080 GOSUB1 250 INPUT" QUANTIA "; :


TTAB (50) USINGU2S AM (NN) ;

A 2110 LOCATE0 L PRINTDAS (NN) :AS , : ;

1090 IFA>9999999»ORA<0THEN1080 -LEFTS (TES (NN) .20) LOCATE10 PRI : :

10 COLOR 15,4.4:KEY0FF:MOTOROFF 1100 LOCATE25,L:PRINTUSINGU2S;A NTAS LOCATE 30 PRINTUSINGU2S


; : : ;

:CLEAR5000 :AM(NU) -A M (NN) TT-TT+AM (NN)


; :

20 DIMTES (200) , AM (200) DAS (200)


, 1110 GOSUB1250 INPUT"CATEGOHIA : 2120 L-L+1:IF (L-21ANDNM08) OR
,CTS(8) ,CA(200) " ;CAS (L-19ANDNM-8) THEN LOCATE14.22
30 FORN" 1T08 READCTS (N) NEXT
: :
1120 GOSUB1180 IFF-0THEN1 110 :
:PRINT"scroll? " ELSE GOTO 215 ; :

40 DATA MANUTENÇÃO DA CASA LAZE ,


1130 CA(NU)-NM:LOCATE36.L:PRINT 0
R.ALUGUEIS E TAXAS ROUPAS AUTOM , ,
LEFTS(CT5(CA(NU)) ,3) 2130 AS-INKEYS:IFAS"""THEN2130
ÓVEL FERIAS MISCELÂNEA RENDAS
, , . 1140 IFNMOSTHENGT-GT+A 2140 GOSUB2280
50 UlS-"SSIMtH4tt .
" :U2S-"M#I 1150 NU-NU+1:L-L+1:IFL-19THEN10 2150 NEXT: I FPT- 1ANDNMOSTHENLPR
MH," 00ELSE1020 INT L PRI NT LPRINTTAB ( 38 ) ;USING"
: :

TOTAL -> "+U1S;TT


2160 LOCATE18.22:PRINTUSING"tot
al ->"+UlS;TT
2170 IFNMO8THEN2250
2180 IFPT-OTHEN2220
2190 LPRINT LPRINT LPRINTTAB (40 : :

) USING"RENDA TOTAL ->"+UlS;TT


;

2200 LPRINTTAB 36) USING"DESPES ( ;

AS TOTAIS ->"+Ul$:GT:LPRINTTAB(
54)
2210 LPRINTTAB (44) USING"BALANÇ ;

O ->"+UlS;TT-GT
2220 LOCATE13,20:PRINTUSING"Ren
da total ->"+UlS;TT
2230 L0CATE9.21:PRINTUSING"Desp
egas totais ->"+UlS;GT
2240 LOCATE17,22:PRINTUSING"Bal
anço ->"+UlS:TT-GT;
2250 AS-INKEYS:IFAS-""THEN2250
2260 IFAS<>CHRS(13)THEN2000
2270 RETURN
2280 L-3:CLS:COLOR 15.NM+2:LOCA
TE20-LEN(CTS (NMJ ) /2 PRINTCTS (NM
:

2290 PRINT " data";TABU8)"ltem


" TAB (32) "quant ia"
;

2300 FORN-3TO20
2310 VPOKEN*40+10.22:VPOKEN*40+
;;( F
L :

2320 NEXT RETURN :

3000 CLS MOTOR LOCATE0 10 PRINT


: : , :

"Posicione a fita e pressione <


RETURN> n
3010 IF1NKEYS-""THEN3010
3020 MOTOR PRINT "Teci e <REC/PLA :

Y> e pressione <RETURN>"


3030 IFINKEYS-""THEN3030
3040 LOCATE8.15:INPUT"Nome do a
rquwo " DAS ARS- "CAS "+DAS
; :
:

3050 OPEN ARS FOR OUTPUT AS*1


3060 PRINT#1,NU
3070 FORN-0TONU-1
.
3080 PRINT 1 DAS (N) " " TES ÍN)
;
, ;

*
" ;AM(N)
, CA(N) ,

3090 NEXT CLOSE |1 RETURN ; :

4000 CLS: LOCATE8. 10 INPUT"Nome :

do arquivo " DAS ARS ""CAS "+DAS


:
: :

4010 MOTOR:LOCÀTE0.12:PRINT"Pos
ícione a fita e tecle <RETURN>"
4020 IFINKEYS-""THEN4Q20
4030 MOTOR:L0CATE0,14:PRINT"Pre
ssione a tecla <PLAY> e <RETURN
>"
4040 IFINKEYS-""THEN4040
4050 MOTOR:GT-0:OPEN ARS FOR IN
PUT AS II
4060 LOCATE6.18:PRINT"Achei ";D
AS
4070 INPUT* 1, NU
4080 FORN-0TONU-1
4090 INPUTI 1 DAS IN) TES (N) AM (N . , .

) .CA(N) 6130 DS-" * PRINT: INPUT" Item ";D


:
70 HTAB 10: VTAB N * 2 + 4 : PR
4100 IFCA (N 08THENGT-GT+AM [N) ) S IFDS-""THEN6150
:
INT N " - " KS
;
:
;

4110 NEXT CLOSE I 1 RETURN : : 6140 IFLEN [DS) >25THEN61 30ELSETE 80 NEXT
5000 CLS LOCATE1 0 10 PRINT" Impr
: , : S(M)-DS 90 VTAB 23: HTAB 20: PRINT " O
6150 PRINT INPUT"Quant ia " A: IF
: r PCAO -> " GET AS
; :

A-0THEN6170 100 IF AS < "1" OR AS > "7" T8


6160 IFA<0ORA>9999999ITHEN6150E EN 90
5020 LOCATE15.13:PP.INT"[D]eslig LSEAH(M) -A 110 PBINT AS;: NORMAL HOME :

ada" 6170 CAS-"":PRINT:INPUT"Categor 120 ON VAL (AS) GOSUB 1000,20


5030 AS-INKEYS:IFAS-""THEN5030 ia -;CAS:IFCAS-""THEN6200 00. 3O0O ,4000 5000. 6000 7000
, .

5040 IFAS-"L"THENPT- 1 RETURN : 6180 GOSUB1180 I FF-0THEN61 70 :


130 GOTO 50
5050 IFAS-"D"THENPT-OELSt5030 6190 CA(M) -NM 1000 IF NU > 200 THEN VTAB 15
5060 RETURN 6200 IFCA (M) OBTHENGT-GT+AM (M) : HTAB 10: PRINT CHRS (7);"MEM
6000 IFNU-OTHENRETURN 6210 RETURN ORIA CHEIA!"; CHRS (7): FOB N -
6010 CLS:PRINT" data" TAB 14 ; [ ) 7000 CLS LO CATE 10. 15: PRINT "Fim
:
1 TO 1000: NEXT RETURN :

"Item" TAB (26) "quantia" TAB 36


,
í
; (
1010 GOSUB 1160
;-cat" 1020 GOSUB 1250: INPUT "DATA (
)

6020 LOCATE0 20 PRINT" Press one i


DD/MM/AA) ";DTS(NU)
:

1030 IF DTS(NU) - "" THEN RET


. :

I->1 para avançar"


6030 LOCATE0 21 PRINT" Pr es3ione . :
URN
[<=] para r e t roceder " PRINT"Ou :
1040 IF LEN (DTS(NU)) > 8 THE
a barra de espaços para editar 10 BEM ONEBR COTO 6000 N 1020
" ;GOT06080 20 DIM TES (200) .QT (200) ,DT$ (20 1050 VTAB L: PRINT DTS (NU)
6040 AS-INKEYS IFAS-" "THEN6040 :
O) .CTS (8) ,CT(200) 1060 GOSUB 1250: INPUT "ITEM:
6050 IFASC (AS -29ANDM>GTHENM=M- ) 25 FOR N - 1 TO 7: READ KS : NE ";TES(NU): IF LEN (TES (NU) ) >
1 :GOTO6080
XT 25 THEN 1060
6060 IFASC(AS)-28ANDM<NU-1THENM 30 FOR H 1 IO 8: READ CTS IN) 1070 AS • LEFTS (TES (NU) , 15)
-M+l :GOT06080 : NEXT VTAB L: HTAB 17 - LEN (AS) / 2
6070 IFASC(AS)-32THEN6100ELSE60 35 DATA ENTRAR DADOS. VER DADO : PRINT AS
S,GRAVAR EM DISCO CARREGAR DO D .
1080 GOSUB 1250: INPUT "QUANTI
6080 LOCATE0 3 PRINTDAS (M) TAB . : ;
ISCO, IMPRIMIR. ALTERAB UM DADO .
A: ";QT(NU)
10) LEFTS (TES (M) 15)
;
PRINTTAB , ; :
IM DE PROGRAMA 1090 IF QT (NU) > 99999999 OR 0.
26) USINGU2S AM (M)
; PRINTTAB J6 ; ; : ( 40 DATA MANUTENÇÃO DA CASA ,
T(NU> < 0 THEN 1080
) LEFTS [CTS [CA (M) .3)
; ) AZER, ALUGUEIS E TAXAS ROUPAS AU , ,
1100 VTAB L: HTAB 26: PRINT QT
6090 GOTO 6040 TOMOVEL FERIAS MISCELÂNEA BENDA
, . ,
(NU)
6100 IFCA(M) 08THENGT-GT-AM (M) S 1110 GOSUB 1250: INPUT "CATEGO
6110 DS-"" PRINT INPUT"Data ";D 50 HOME RESTORE : INVEHSE :
RIA: ";C3
"MENU
:
: :

S IFDS-" "THEN61 30 VTAB 2: HTAB 7: PBINT 1120 DS - CS: GOSUB 9000: IF F


:

6120 I FLEN (D$) >8THEN6110ELSEDAS PRINCIPAL" • 0 THEN 1110


[M) -DS 60 FOR N - 1 TO 7: READ KS 1130 CT(NU) - NM: VTAB L: HTAB
38:
) i
PRINT LEFTS (CTS (CT (NU) ) ,
;
"PR|0"
2220 VTAB 21
iiiiiim
HTAB 16: PRINT 1
< NU - 1 THEN M - M + 1: GOTO 6
080
1140 IF C < > 8 THEN GT - GT RENDA TOTAL 6060 IF AS - CHRS (6) AND M >
+ QT (NU) 2230 VTAB 22: HTAB 15: PRINT 1

0 THEN M - M - 1: GOTO 6080


1150 NU - NU .+ 1 :L - L + 1: IF DESPESAS TOTAISS ->";GT; 6070 GOTO 6030
L THEN 1000
- 21 2240 VTAB 23: HTAB 20: PRINT '

6080 VTAB 5: HTAB 1: CALL - 8


1155 GOTO 1020 BALANÇO ->";T' 68: PRINT "DATA: ";DTS(M)
1160 L - 3: PRINT " data"; TAB 2250 GET AS 6090 VTAB 8: CALL - 868: PRIN
( 15) item"; TAB í 26);"quantia 2260 IF AS < CHRS (13) THE T "ITEM: ":TES(M): VTAB 11
" TAB ( 38) "cat";
; ;
N 2000 :CALL - 868: PRINT "QUANTIA:
1170 RETURN 2270 RETURN " QT (M) VTAB 14: CALL - 868
; :

1250 HTAB li VTAB 23; CAL L - PRINT "CATEGORIA: ";CTS(CT(M)


2280 HOME :L - 4: HTAB 20 - L :

958: RETURN EN (CTSINH)) / 2: PH INT CTS (NM) )

2000 HOME FOR N - 1 TO 8 :


2290 PRINT " data"; TAB ( 18); 6095 GOTO 6030
2010 HTAB 10: VTAB 2 * N + 3 "item"; TAB ( 32 ); "quant ia" 6100 IF CT(M) < > 8 THEN GT -
2020 PRINT N;":- ";CTS(N): NEX 2300 FOR N - 4 TO 21: VTAB N: GT - QT (M)
T HTAB 9: PRINT "!";: HTAB 31: PR 6110 FOR X - 1 TO 4
2030 TT - 0: HTAB 15: VTAB 23: INT "1"; NEXT :
6120 VTAB X * 3 + 2: HTAB 12;
PRINT "Qual categoria? "; 2310 RETURN CALL - 868: INPUT " B ;DS
2040 GET AS: IF AS < "1" OR AS 3000 HOME VTAB 15: HTAB 10: :
6130 ON X GOTO 6200.6300,6400.
> "8" THEN 2040 INPUT "Nome do arquivo7 ";DAS 6500
2050 NH - VAL (AS) 3010 IF DAS - "" THEN
6140 NEXT
RETURN
2060 IF PT - 1 THEN PRINT 6150 IF CT(M) < > 8 THEN GT -
P :
3020 PRINT PRINT CHRS (4) i" :

RINT CHRS <4):"PR»1": PRINT C OPEN" ;DAS GT + QT (M)


HRS (9):*80N": PRINT SPC{ 40 - 6160 RETURN
3030 PRINT CHRS (4) DELETE" '

LEN (CTS(NM)) / 2);CTS(NM): P 6200 IF DS - "" THEN DS - DTS(


DA3
RINT PRINT SPC( 10);" DATA" M) GOTO 6600
:
:
3040 PRINT CHRS (4) OPEN" DA
6210 IF LEN (DS) > 8 THEN 612
;

; SPC( 17);*ITEM"; SPC{ 18) "QUA


NTIA" PRINT CHRS (4) "PRiO" :
0
:
3050 PRINT CHRS (4) 'WRITE"
6220 DTS (M) " DS; NEXT
2070 GOSUB 2280 AS
2080 FOR NN - 0 TO NU 6300 IF DS - "" THEN DS - TES
PRINT NU
2090 IF CT (NN) < > NM THEN 21 3070
M) GOTO 6600
:
FOR N - 0 TO NU - 1: PRIN 6310 IF LEN (DS) > 25 THEN 61
50 TDTS(N); CHRS (13);TES(N); CHR
2100 IF PT - 1 THEN PRINT P 20
:
S (13);QT(N); CHRS (13);CT(N):
RINT CHRS (4);"PR|1": PRINT C 6320 TES (M) - DS: NEXT
NEXT 6400 IF VAL (DS) - 0 THEN DS
HRS <9);-60N";: PRINT SPC( 10) 3080 PRINT CHRS (4) "CLOSE" ;

- STRS (QT (M) GOTO 6600


) :
; DTS (NN) SPCI 5 + (8 - LEN (D ; RETURN 6410 VAL (DS) > 9999999 TH
IF
TS(NN) ) ) ;TES (NN) SPC( ) ; 6+25 4000 HOME VTAB 15: HTAB 10::
EN 6120
- LEN (TES(NN))); SPC ( 7 - LE INPUT "Nome do arquivo? ";DAS 6420 QT (M) - VAL (DS) NEXT :

N ( STRS (QT (NN) ) ) QT (NN) PRI ) ;


:
4010 IF DAS - "* THEN RETURN 6500 IF DS - "" THEN DS - CTS
NT CHRS (4) "PR#0" ;

4015 GT - 0 CT (M) } GOTO 6600


:

2110 VTAB L: HTAB 1: PRINT DTS 4020 PRINT PRINT CHRS (4):" :
65"10 GOSUB 9000: IF F - 0 THEN
(NN);:AS - LEFTS (TES (NN) 20 , )
OPEN" DAS ;
6120
HTAB 10: PRINT AS;: HTAB 32 + 4030 PRINT CHRS (4) "READ" DA ;
;
6520 CT(M) - NM: GOTO 6140
(7 - LEN ( STRS (QT(NN)))): PH S 6600 VTAB 3 * X + 2: HTAB 12:
INT QT (NN) TT - TT + QT (NN) ; :
4040 INPUT NU PRINT DS: NEXT RETURN :

2120 L - L + 1: IF (L - 2l AND 4050 FOR N - 0 TO NU - 1 7000 VTAB 15: HTAB 8: PRINT "T
NM < > 8) OR (L - 19 AND NM - 4060 INPUT DTS (N) TES !N) ,QT(N) , ermino o programa? (S/N)";
8) THEN VTAB 23: HTAB 15: PRIN ,CT(N) 7010 GET AS: IF AS < > "S" AN
T "Scroll 7";: GET AS: GOSUB 22 4065 IF CT(N) < > 8 THEN GT - D AS < > "N" THEN -7010
80 GT + QT (N) 7020 IF AS - "N" THEN RETURN
2150 NEXT IF PT - 1 AND NM < :
4070 NEXT 7030 END
PRINT
> 8 THEN PRINT CHRS :
4080 PRINT CHRS (4); "CLOSE" 8000 IF PEEK (222) > 5 THE <.
(4) "PRI1" PRINT CHRS (9) "8
;
:
;

4090 RETURN N RESUME


0N" PRINT :PRINT PRINT SPC : :
5000 HOME VTAB 15: HTAB 10:
: 8005 PRINT CHRS (4) "CLOSE" ;

40) "TOTAL ->";TT: PRINT


;
( CHR PRINT "Ligo impressora?
a (S/N) 8010 PRINT CHRS (4) "DELETE* ;

S (4) ;*PRI0" DAS


2160 VTAB 23: HTAB 21: PRINT " 5010 GET AS: IF AS < > "S" AN B020 HOME VTAB 20: HTAB 10:
;

TOTAL ->" ;TT; D AS < > "N" THEN 5010 FLASH PRINT "ARQUIVO INEXISTE
:

2170 IF NM < > 8 THEN 2250 5020 PRINT PRINT TAB 20);" : ( NTE "
!

2180 IF PT - 0 THEN 2220 OK!": IF AS - "N" THEN PT - 0 8030 FOR I - 1 TO 2000: NEXT :

2190 PRINT PRINT CHRS (4) :


;

RETURN NORMAL
PR*1": PRINT CHRS (9);"80N": P 5030 PT - 1 RETURN : 8040 GOTO 50
RINT PRINT PRINT SPC( 40);
: :
6000 IF NU - 0 THEN RETURN 9000 IF VAL (DS) < > 0 THEN
"RENDA TOTAL ->" SPC( 9 - LEN ; 6020 VTAB 20: PRINT PRINT "P : 9030
STRS (TT)));TT: PRINT SPC
( ressione (->) para avançar": PR 9010 F - 0: FOR N - 1 TO 8
36) "DESPESAS TOTAIS ->"
;
SPC ; INT "Pressione [<-] para retroc 9020 IF LEFTS (DS.3) - LEFTS
9 - LEN ( STRS (GT) GT ) ) ; eder" PRINT "Ou a barra de eap
: (CTS IN) ,3) THEN F - 1 NM - N :

2200 PRINT SPC( 54) " ;


acos para corrigir";; GOTO 6080 9025 NEXT RETURN :

6030 GET AS 9030 IF VAL (DS) > B THEN F -


2210 PRINT SPC{ 44); "BALANÇO 6040 IF AS - CHRS (32) THEN 6 0: RETURN
->"; SPC( 9 - LEN STRS (TT - ( 100 9040 NM - VAL (DS):F - li RETU
MO GT)));TT - GT: PRINT CHRS (4) 6050 IF AS - CHRS (21) AND M RN
IIIIIHIIIlMMfc— — llllllll
USE COMANDOS ABREVIADOS
COMO ECONOMIZAR MEMÓRIA
COMANDOS MÚLTIPLOS
COMO MELHORAR A
VELOCIDADE DE UM PROGRAMA

Programas mais curtos ocupam menores


espaços na memória do computador,
além de serem de execução mais rápida,
Aprenda a trabalhar com eles,

melhorando o desempenho do seu micro.

Uma das regras básicas para se escre-


ver um programa é torná-lo claro e le-
gível, usando linhas curtas com comen-
tários e espaços em branco e, se possí-
vel, com nomes longos de variáveis.
Evitar a digitação de muitos caracte-
res éuma das exigências mais importan-
tes quando se pretende, por exemplo,
copiar a longa listagem de uma revista.
Neste caso, não há necessidade de digi-
tar todas as declarações REMdo pro-
grama. Afinal, sempre é possível con-
sultar a revista mais uma vez, caso a fi-
nalidade de alguma seção do programa
tenha sido esquecida.
Outra maneira de reduzir o trabalho
de digitação na entrada de um progra-
ma é omitir palavras -chaves opcionais mas muito longos. IF A-BAND B-C THENPRINT"0K"
do BASIC, embora nem todos os micros Uma das formas de economizar bytes o computador pensará que existe uma
admitam esse tipo de omissão (é o caso extras é utilizar nomes de variáveis com variável chamada BANI), e, como ela
do Sinclair). Mas em outros computa- uma letra apenas. Esse procedimento não existe, poderá ocorrer um erro du-
dores você pode deixar de lado todos cft poupa não só tempo de digitação, co- rante a execução do programa (ou, em
LET e THEN, que são declarações op- mo também espaço de memória. Mas é alguns micros, uma mensagem de erro).
cionais, ou mesmo —
como no caso de sempre bom manter uma lista sobre o Um terceiro modo de economizar
uma linha de programa que contenha que faz cada variável, já que fica mais memória consiste em combinar várias
IF...THEN GOTO... —
omitir o THEN difícil usar códigos mnemónicos para declarações em uma única linha. Na
ou o GOTO (a eliminação de ambas as variáveiscom apenas uma letra. maioria dos computadores descritos
partes, porém, não é possível). Outra maneira de se encurtar um [ aqui (linhas TRS-80, TRS-Color, MSX,
Alguns micros permitem que se en- grama é omitir espaços em branco Sinclair Spectrum, Apple II e TK-2000),
trem palavras- chaves de forma abrevia- tre comandos, variáveis e operadores. o sinal de separação entre os comandos
da, como ? em vez de PRINT, e '
(após- Isso não se aplica ao ZX-81 e ao Spec contidos em uma mesma linha é (dois :

trofo), para substituir REM, nos micros trum (nesses micros, os espaços apare- pontos). Apenas nos micros compatíveis
das linhas TRS-80 e TRS-Color. cem automaticamente). Em outros mi com a linha ZX-81 isso não é possível.
Quando o programa for listado ou eros a omissão de espaços é uma med: Mas esse recurso torna os programas
impresso, as abreviações aparecerão por da extrema, pois ela torna muito diffei mais difíceis de serem entendidos.
extenso (com exceção do apóstrofo). As- a leitura do programa. Uma
regra, con- A maioria dos métodos aqui indica-
sim, embora isso poupe tempo de digi- tudo, deve ser sempre observada: você dos tende a acelerar ligeiramente a ve-
tação, não leva a nenhuma economia de deve deixar um espaço entre uma variá- locidade de execução de um programa.
memória, e nem faz com que o seu pro- vel e o início de umapalavra-chave. As- Outro truque para se nuclear a execu-
grama rode mais rápido. sim, uma linha como essa: ção de laços FÓR...NEXTÉ omitir a va-
riável que vem após o NEXT (isso não
IF A - B AND B - C THEN PRINT é permitido em alguns micros). Se o pro-
COMO ECONOMIZAR MEMÓRIA OK" grama tiver vários laços aninhados, ter-
pode se tornar mais curta desse modo: minando na mesma linha, podemos co-
Outra razão para se encurtar um pro-
IFA-B ANDB-C THENPRINT"0K"
locar um único NEXT; por exemplo:
grama é economizar espaço da memó- NEXT A, B, C (apenas certos micros
ria. Essa economia é decisiva em progra- Mas, se você escreveu: aceitam esta sintaxe).
IIIIIIIIIIIHH llllllllll
com o
ABAIXO Diretamente relacionados
funcionamento interno do
computador, binários e hexadecimais

DE ZERO apresentam problemas quando é


preciso representar números negativos.

Durante a programação em código de Em nossa aritmética de três dígitos, sim- 20 PRINT88 "NÚMEROS NEGATIVOS";
.

30 PRINTê40,STRINGS(16,CHR${131
máquina, é comum nos depararmos plesmente não existe espaço para ele.
>)
com números negativos, como por Assim, o resultado dessa adição, em um i

40 PRINTe65,"DEC"TAB(15)"BIN"TA
exemplo quando, numa programação de sistema de três dígitos, será 99, que é
B (26) "HEX"
jogos, somos levados a movimentar fi- exatamente o que você obterá se subtrair 50 PRINTS226 "+"TAB (29) "+"
.

guras em determinadas direçòes ao lon- 1 de 100!


60 PRINT6361 "COMPLEMENTO DE 2"
.

go da tela. Do mesmo modo, em um sistema de- 70 PRINTe483 "0 .


0 0 0 0 0 0
Como todos os outros, esses núme- cimal de três dígitos, o resultado da so- 0 0 00"
ros devem ser codificados em bytes de ma de 998 mais 100 seria o mesmo da 80 FOR J-1474 TO 1502:POKE J.13
oito bils, pois os computadores com uni- subtração de 100 menos 2. E subtrair 998 1 :NEXT

dades de memória desse tipo não con- de 100 seria o mesmo que adicionar 2. 90 FOR J-l TO 7
Recapitulando: a mesma série de al-
100 FOR K-l TO 24
tam com outros recursos para armaze-
110 POKE 1123 + K + 32M, 175
nagem de algarismos. Isto, porém, le- garismos em um byte de oito bits pode
120 NEXT K.J
vanta um problema: como você já viu, representar um número negativo e um 130 PRINT§1?4."BITS";
um byte pode representar qualquer nú- positivo. Qualquer operação torna-se 140 PRINTê 31 3 " + 1" ,

mero de 0 a 255, ou 00000000 a confusa e difícil diante disso. 150 AT-AT AND 255
1 1 1 1 1 1 1 1
, em binário. Mas isso esgota O que você pode fazer em relação a 160 T=AT: IF T-128 THEN SOUND 3
todas as possibilidades do binário de oi- isso? Bem, na maioria das aplicações em 0.2
to bits, já que não existe espaço para si- computadores domésticos, não há com 170 LN-3:GOSUB 280; GOSUB 310
nais de mais ( + ) ou menos (-),e nenhu- que se preocupar: os endereços de memó- 180 T-T+256*{T?127) :GOSUB 340
ria e códigos de operação, ambos repre-
190 T°255-T;LN-7:GOSUB 280
ma maneira pela qual eles possam ser re- 200 T-T+1:T-T AND 255 LN- 1 3 GOS
presentados nessa gama de valores. Em
: :
sentados em binário, serão sempre con-
UB 280: GOSUB 310
aritmética simples, se você subtrair de I siderados positivos. As únicas vezes em 210 T-T+256* (T>128) :GOSUB 340
0 obterá - 1 .Agora, tente o mesmo cál- que você encontrará números negativos 220 INS'INK£YS:IF INS<>"B" AND"
culo em binário com oito bits: serão com dados ou com os chamados INSO" " AND INSOCHP.S (13) THEN
saltos relativos, os quais são códigos de 220
00000000 máquina aproximadamente equivalentes 230 IF INS-"B~ THEN AT-AT"I;GOT
às declarações GOTO do BASIC. 0 ISO
240 IF INS = " " THEN AT'AT+1 GOT :

11111111 O 150
COMO "VIRAR" OS BITS 250 PRINT 6384.;:INPUT AT
Esse resultado levará você, ao chegar 260 PRINT #384. " "

ao oitavo bit à esquerda, a pedir "em- O processo utilizado em binário pa- 270 GOTO 150
prestado" um do próximo lugar à es- ra se obter, a partir de um número
po- 280 FOR X-0 TO 7
querda; mas quando o número binário sitivo, o seu valor negativo, é conheci-
290 IF-(T AND 2"X) THEN PRINT S
LN*32+23-X*2+ (X>3) " 1 " ELSE PRI ,

2. Na reali-
;

é limitado a oito bits não existe nada à do como complemento de NT @LN*32+23-X*2+<X>3) ."0";
esquerda a ser emprestado. Do mesmo dade, essa técnica não tem uma base teó- 300 NEXT RETURN :

modo, se você subtrair outro 1 (para ob- rica muito bem fundamentada; o impor- 310 IF T<16 THEN A$-"0" ELSE AS
ter-2 em aritmética simples), obterá tante é que ela funciona.
11111110. Mas se 1I1II11I em binário Para seobter o valor negativo de um 320 PRINT eLN*32+29.AS+HEXS(T)
equivale a 255 em decimal, então número binário, é necessário "virar" os 330 RETURN
11111110 deverá ser 254! bits e acrescentar 1 "Virar os bits" sig-
.
340 PRINT ê32*LN.MID${* "+STR
Imagine agora, por exemplo, o que nifica transformar os bits 1 em 0 e aque- S(T) LEN (STRS (T) ) )
, ;

poderia acontecer em decimal se você les que têm valor 0, em 1.


350 RETURN
não tivesse mais que três dígitos ou "co- No programa seguinte mostramos co-
lunas" para colocar seus números. Ve- mo isso funciona. Note que. quando o
ja o que acontece se você tentar acres- binário for limitado a oito dígitos, seu
centar 999 a 100, quando tais limitações equivalente em hexadecimal preencherá
10 PRINT AT 0.7; "NÚMEROS NEGA
são impostas: exatamente dois dígitos. Isso significa T1VOS"
que o hexadecimal equivalente ao com- 20 PRINT AT 2.1;"D£C";TAB 14:
100 plemento de 2 também atuará como o "BIN" TAB 28;"HEX"
;

+ 999 negativo. 30 LET AS""

(1)099

número um, na unidade de milhar,


D 40 FOR N-7 TO 13
50 PRINT AT N,6r INVERSE
60 NEXT N
1 ; AS

FO 10 CLS 70 PRINT AT 8.14;"BIT5":


IIIIIIIIIIIHHUHHBHMnBHIIIIIIIHIÍ
QUANDO SÃO NECESSÁRIOS
NÚMEROS NEGATIVOS
A CONVERSÃO DE NÚMEROS
NEGATIVOS
A CONVENÇÃO DO SINAL

BRIGHT 1;AT 12,21;"+1" 140 FOR N-l TO 8: LET A[N)-0 210 PRINT AT 18.0; "

80 PRINT AT 1Q,3;"+";AT 10,30 150 IF CC-D>=0 THEN LET A (N)


1 :LET CC-CC-D 220 PRINT AT 19. 3; "0 0 0 0
90 PRINT AT 15, 7; "COMPLEMENTO 160 PRINT BRIGHT 1;AT 4.6+2'N 0 0 0 0 0 00'
DE 2" ; A (N) AT 1 0 6+2*N 1-A (N)
; , ; 230 IF INKEYS-" " THEN GOTO
95 LET C-0 170 LET D-D/2: NEXT N 230
100 LET DD—C: DIM A[8) 180 POKE 23608, DD: LET DD-PEEK 240 LET AS-INKEYS: IF AS- " "
110 PRINT AT 4,0;" " AT 4,4
; 2360B: LET D-128 THEN LET C-C+l : IF C-128 THEN
-LEN STRS C;C 185 LET Z-DD: GOSUB 300; PRINT LET C--128: SOUND 1.1
115 POKE 23608, C: LET E-PEEK AT 17. 29; AS 250 IF A$-"B" OR AS="b" THEN
23608: LET Z-E: GOSUB 300: 190 FOR N-l TO 8: LET B-0 :IF LET C-C-l: IF C--129 THEN LET
PRINT AT 4 29 AS
. ; DD-D>-0 THEN LET B-l LET DD-
: C-127: SOUND 1,1
120 PRINT AT 17.0;" " AT 17
; DD-D 260 IF AS<>" " AND AS<>"B" AND
,4-LEN STRS DD DD ; 200 PRINT BRIGHT 1 AT 17,6+2*
: A$<>"b" THEN INPUT "?";C
130 LET D-128: LET CC-E N;B: LET D-D/2: NEXT N 270 GOTO 100
Illlllllll III
300 LET ZA-INT (Z/16) : LET 2B- LET C-127
Z-U6*ZA) 260 IF AS<>"F" AND AS<>"B" THEN
310 LET ZA-ZA+48: IF 2A>57 INPUT C
THEN LET ZA-ZA+7 2 70 GOTO 100
320 LET ZB-ZB+48: IF ZB>57 300 LET ZA-INT (Z/16)
THEN LET ZB-ZB+7 305 LET ZB-Z- (16*ZA)
330 LET AS-CHRS ZA: LET AS-AS+ 310 LET ZA-ZA+28
CHRS ZB: RETURN 320 LET ZB-ZB+28
330 LET AS-CHRS ZA
340 LET AS=AS+CHRS ZB
350 RETURN
COMO CONTAR EM COMPUTÊS
Se quisermos contar qualquer coisa 10 PHINT AT 0,7; "NÚMEROS NEGAT
gm um computador, devemos começar IV0S"
sempre do zero e avançar dal para ci- 20 PRINT AT 21,1;"DEC";TAB 14;
ma. Por exemplo, as locações de me- "BIN" TAB 28 "HEX"
;
;
10 SCREEN 1 KEY OFF
:

aria são numeradas em hexadecirr 14 VPOKE BASE (6) +27, 166


30 LET AS""
de 0000 a FFFF. 20 LOCATE 6.0:PRINT "Números ne
0 mesmo acontece com os bits em 40 FOR N-7 TO 13 gativos"
m bvte. Quando numeramos os b 50 PRINT AT N,6;AS 30 LOCATE 6,1: PRINT STRINGS (17,
começamos a partir da direita, com o 60 NEXT N 223) i

bit número 0, e aumentamos a conta- 70 PRINT AT 8.14;"BITS";AT 12, 40 LOCATE 3,3:PRINT "DEC";TAB(1
gem à medida que nos deslocamos pa- 3) ;"BIN";TAB(24) "HEX"
;

a a esquerda. 80 PRINT AT 10,3; ; AT 10.30; 50 LOCATE 1,10: PRINT "+";TAB<27


Assim, o dígito binário da extrema );"+";
direita é chamado de bit 0. O que está 90 PRINT AT 15,8; "COMPLEMENTO 60 LOCATE 6,17:PRINT "Compl emen
imediatamente à sua esquerda é cha- DE 2" to de 2";
mado de bit 1 o seguinte de bit 2 e as-
,
95 LET C-0 70 LOCATE 0,21: PRINT " 0 0 0
sim por diante, até o bit 7 — aquele que 100 LET DD— 0 0 0 0 0 0 00 " ;

está na extrema esquerda de um byte. 105 DIM A(8) 80 FOR J-2 TO 30


Assim como em politica, os termos 110 PRINT AT 4,0;" " AT 4.4- ; 84 VPOKE BASE(5)+J+19*32.223
â direita" e "à esquerda" podem, em LEN STRS C;C 88 NEXT
ertos casos, parecer um pouco con- 90 FOR J-l TO 7
115 POKE 16507,
fusos, especialmente quando lidamos 100 FOR K-l TO 24
116 LET E-PEEK 16507
com números de dois bytes que podem 117 LET Z-E 110 VPOKE BASE(51+195+K+32»J,21
ser armazenados de cima para baixo, 9
118 GOSUB 300
ou de baixo para cima, dependendo de 119 PRINT AT 4,29;AS 120 NEXT K,J
como o computador opera. 120 PRINT AT 17,0;" " AT 17, ;
130 LOCATE 12.11:PRINT "BITS";
Em "computês" correto (ou seja, na 4-LEN STRS DD DD ;
140 LOCATE 23,12:PRINT "+1"
linguagem universal dos computado- 130 LET D-128 150 AT-AT AND 255
res), esses números são chamados de 135 LET CC-E 160 T-AT
valor mais significativo — isto e, com 140 FOR N-l TO 6 165 IF T-128 THEN SOUND 7,56:SO
o endereço mais alto — e valor menos
145 LET A (N) -0 UND 8,15:SOUND l,l:FORI-l TO 50
150 IF CC-D>-0 THEN LET A(N)-1 :NEXT: SOUND 8,0
Dessa forma, se você estiver arma- 155 IF CC-D>-0 THEN LET CC-CC-D 170 LN-3:GOSUB 280
zenando um endereço — 3D8E, por 160 PRINT AT 4 6+2*N A (N) AT 10
, ; 175 GOSUB 310
exemplo — 3D é o byte mais signifi-
;

,6+2*N;l-A(N) 180 T-T+2S6*(T>127)


cativo, enquanto 8E é o byte menos 185 GOSUB 340
170 LET D-D/2
significativo. 190 T-255-T:LN-7;GOSUB 280
175 NEXT N
Os computadores das linhas £
180 POKE 16507, DD 200 T-T+1:T-T AND 255:LN-13
lair, TRS-80 e MSX colocam o byte
181 LET DD-PEEK 16507 205 GOSUB 280:GOSUB 310
lenoroul menos significativo - 8E,no 182 LET D-128 210 T-T+256*(T>128)
exemplo acima — na locação de me- 185 LET Z-DD 215 GOSUB 340
-lóriamais baixa. O byte alto, que va- 186 GOSUB 300 220 INS-INKEYS: IF INSO"B" AND
l 100 em hexa (ou 256 em decimal), 187 PRINT AT 17,29;AS INS<>" " AND INSOCHRSC13) THEN
3D neste caso, é colocado com o en- 220
190 FOR N-l TO 8
dereço mais alto na locação de memó- 230 IF INS-"B" THEN AT-AT-1 :G0T
191 LET B-0
o endereço de memória que
ria (isto é,
192 IF DD-D>-0 THEN LET 8=1 O 150
recebeu 8E, mais f|. 193 IF DD-D>-0 THEN LET DD~DD'D 240 IF INS-" " THEN AT-AT+1 GOT
:

Existe uma única exceção para es- 200 PRINT AT 17,6+2*N;B O 150
a convenção de baixo/alto: os núme- 205 LET D-D/2 250 LOCATE 0,20: INPUT AT
os da linha BASIC são armazenados 20 7 NEXT N 260 LOCATE 0,20: PRINT " ";
em forma inversa. 210 PRINT AT 18,0;" 270 GOTO 150
O TRS-Color, por sua vez, arma 280 FOR X-0 TO 7
a todos os números de dois bytes na 220 PRINT AT 1 9 , 3
;
" 0 0 0 0 0 290 IF -<T AND 2"X) THEN VPOKE
locação de memória mais baixa com o 0 0 0 00" BASE (5)+LN*32+87-X*2+ !X>3) ,ASC(
0
byte alto, e armazena o byte baixo na 230 IF INKEYS-"" THEN GOTO 230 "1") ELSE VPOKE BASE<5)+LN"32*8
locação de memória mais alta. 240 LET AS=INKEYS 7-X*2+(X>3) ,ASC("0")
A mesma terminologia se aplica aos 242 IF AS-"F" THEN LET C-C-+1 300 NEXT: RETURN
bits. O bit mais significativo no núme- 244 IF AS-"F" AND C-128 THEN 310 IF T<16 THEN AS-"0" ELSE AS
o binário 01010101, o bit 7, é O, e o
LET C-128
bit menos significativo, o bit 0, é o 1 250 IF AS-"B" THEN LET C-C-l
255 IF AS-"B" AND C 129 THEN —
;

Illlllllll

330 RETURN Na convenção de sinal, o número 128


340 LOCATE 0,LN+2:PRINT MIDS(" (ou I0Ô000OO, em binário) atua como seu
"+STHSÍT) LEK (STRS
, (T) ) ) próprio negativo e o computador recomeça
350 RETURN a contar de forma ascendente.

Um número binário ou hexadecimal


pode, na maior parte das vezes, atuar
perfeitameme bem, seja ele um número representar a série de 0 a 255, o compu-
positivo ou negativo. Mas, às vezes, vo- tador a trata como - 128 a + 127.
cê precisa saber se um número é positi- No programa de conversão de com-
vo ou negativo. plemento de 2, você notará que o com-
Quando se quer que um programa dê putador se atrapalha quando chega ao
um salto, em código de máquina, é pre- 128. Isso se deve a que o 128, ou seja, O BCD é empregado para imprimir
ciso especificar quantos bytes deve ter 10000000 em binário, ou 80 em hexa, números na tela, ou transmiti-los rapi-

o salto a ser dado pelo computador: com atua como o seu próprio negativo (você damente. Para codificar um decimal de
um número positivo, no caso do salto pode verificar por si mesmo: -10000000 dois dígitosem um byte em binário, i

locamos o digito à direita nos últimos


para a frente; com um número negati- + 10000000 - (1)00000000 ou 0 em bi-
quatro bits significativos (um " meio
vo, para saltar para trás. nário de oito bits, do mesmo modo que
byte") e o digito à esquerda dentro 6o
O que o computador faz è olhar pa- 80 + 80 = {1)00 ou 0 em hexa de dois
meio byte mais significativo.
ra o primeiro bit do número binário e dígitos. E 128 - 128 = 0 em decimal). Existem dezesseis dígitos que po-
decidir se o número é negativo ou posi- Portanto, qual deles é positivo ou ne- dem ser codificados em quatro bits bi-
tivo. Se o primeiro bit for 1, o compu- gativo? O 10000000 tem o I em seu pri- nários. O BCD é um número hexadeci-
tador o tomará como negativo. Se for meiro bit; o computador o trata como mal sem as letras A, B, C, D, E e F. 0
0, ele será considerado como positivo. um número negativo: - 128. Por outro la- único problema surge quando obtemos
Conhecido como convenção de sinal do, o 0 — ou 00000000 — tem o 0 em um número maior que 9 em um c
-

seu primeiro bit; desse modo, o compu-


meios bytes.
esse processo indica que, ao invés de to-
mar números binários de oito bits para tador o trata como positivo.
IIIIIIIIIHHH lllllllll
©TOEM E LIMPEZA COMO UTILIZAR TAB

SINAIS DE
COM
PRINT
PONTUAÇÃO
COMO MELHORAR A EXIBIÇÃO
EM TELA

Listas, tabelas e instruções são mais ração PRINT). Entretanto, há outros Entretanto, existem meios para dizer
comandos (associados ou não ao ao computador como imprimir a men-
compreensíveis quando distribuídas
PRINT) destinados a posicionar o cur- sagem em uma posição diferente:
pelo vídeo de forma clara e ordenada. sor na tela por meio do endereçamento
PRINT TAB(20)"BOA TARDE"
Use comandos do BASIC para isso.
por linhas e colunas e que variam ampla-
mente entre os diversos computadores: A função TAB é usada em conjunto
com um PRINT. O número entre parên-
Existem muitas maneiras de se dispor Comando Microcomputador teses especifica acoluna a partir da qual
textos na tela. Mas é importante orga- PRINT AT Sinclair o texto (ou número) que se segue será
nizar bem a exibição, especialmente se PRINT @ TRS impresso. Pode-se colocar também uma
você está escrevendo um programa que LOCATE MSX expressão numérica ou uma variável.
outras pessoas utilizarão. HTAB e VTAB Apple O resultado da expressão numérica ou
Cada computador possui uma manei- o número colocado como parâmetro po-
ra própria de posicionar o texto na te- dem ser fracionários, mas o computador
la. Algumas funções de posicionamen- usará apenas a sua parte inteira (por
to são padronizadas para todas as va- exemplo, TAB (23, 2197) será aproxima-
riantes do BASIC, independentemente
PRINT -BOM DIA"
do para 23). O número resultante deve
da marca do computador (exemplo: a ficar entre 0 e o número máximo de co-
função TAB e os sinais de pontuação — imprimirá a mensagem na próxima linha lunas por linha do computador. É pos-
vírgulas e pontos e vírgulas —
utilizados em branco, a partir da margem esquer- sível também posicionar cada palavra se-
para separar os elementos de uma decla- da da tela. paradamente. Modifique a linha para:
PRINT TAB(20) "BOA" TAB{30)" imprimirá OCADISí ( )S. sem separa-
1 10 PRINT "01234567090123456679
TARDE" PRINT forem nú-
ção. Se os elementos de 901234567390"
20 PRINT 9:9
A primeira palavra é impressa a par- meros, e não cordões alfanuméricos, o
30 PRINT 9,9
tir da coluna 20, e a segunda, a partir resultado dependerá do tipo de micro.
da coluna 30 (TAB negativo não funcio- Alguns colocarão um espaço em bran-
co antes do número a ser impresso.
A linha 10 numera as colunas no to-
na, ou seja, não se pode recuar posições po da tela. Uma vírgula separa os nú-
na linha de impressão). Assim,
meros em "campos", cada um com dez
Não existe espaço em branco entre a PRINT "SOMA"; 25 colunas de extensão (dezesseis, no Sin-
palavra-chave TAB e o primeiro parên- SOMA clair). Agora tente o mesmo programa
mostrará o resultado: 25.
tese. Alguns micros exigem ponto e com textos (isto é, cordões alfanuméri-
No Sinclair, entretanto, o resultado
vírgula entre o TAB e o elemento que
dessa instrução seria: SOMA25. cos), acrescentando essas linhas:
o segue: A vírgula funciona como a função 40 LET A3-"A"
TAB. A
cada vírgula encontrada, o pro- 50 PRINT AS:AS
grama coloca a próxima informação a 60 PRINT AS. AS
ser impressa numa posição distante dez
Normalmente, costumamos alinhar
SINAIS DE PONTUAÇÃO colunas (ou dezesseis, no Sinclair) à di-
palavras à esquerda e números à direi-
reita da última posição inicial. Assim,
ta, mas os computadores descritos aqui
A função TAB indica a coluna, nu- PRINT "TOCA", "DISCOS" não fazem isto automaticamente.
ma linha de impressão na tela, a partir produzirá: O ponto e vírgula é essencial para
da qual o texto será exibido. que a função TAB funcione corretamen-
O comando PRINT emprega virgula TOCA DISCOS. te, pois uma vírgula após um TAB pro-

e ponto e vírgula (e também apóstrofo, Em muitos casos, especialmente vocará o deslocamento para uma nova
na linha Sinclair Spectrum), para deter- quando há colunas de números ou de posição de tabulação. O ponto e virgula
minar o espaço entre os elementos a se- palavras, a informação pode ser posicio- também é útil no final de uma declara-
rem impressos. nada muito mais facilmente e com mui- ção PRINT. Sua função, neste caso, é
Quando dois elementos de uma linha to menos esforço de sua parte, exigin- manter o cursor de impressão na tela,
PRINT são separados por um ponto e do o emprego da função TAB apenas de na última posição impressa, de tal for-
vírgula, o computador não concede es- vez em quando. Digite e execute as li- ma que o próximo comando PRINT en-
paço entre eles e: nhas a seguir, para ter uma ideia de co- contrado pelo programa comece a im-
PRINT "TOCA" "DISCOS"
;
mo isso funciona: primir nessa posição, sem mudar de li-
IIIIIIIIIHIHH lllllllll
nha na tela. O programa a seguir impri- presso vai começar: os números (ou ex- o PRINT TAB para escrever (nem para
me todo o alfabeto utilizando um laço pressões) que seguem ATindicam a li- apagar) por cima de qualquer material
FOR...NEXT para incrementar de um nha e a coluna; as linhas: na tela. Se você entrar um novo PRINT
em um os códigos ASCII para os carac- PRINT AT 0,0,"*"
TAB na antiga posição, a impressão se-
teres de A a Z.
PRINT AT 21,0,**" rá realizada em uma linha abaixo da an-
PRINT AT 0,31,"»" terior. Agora, digite:
20 FOR C-65 TO 90
30 PRINT CHR5(C) PRINT AT 21,31,"*" PRINT AT 0,15;"**
40 NEXT C PRINT AT 0,15;"?"
imprimirão um asterisco em cada canto
(Para micros da linha Sinclair ZX-S 1 do vídeo. Se você quiser imprimir mais
de um caractere em uma locação da te-
Limpe a tela (CLS) e tente isso:
substitua a linha 20 por FOR C = 38 TO
63, pois eles usam um código diferente la, o computador imprimirá o primeiro PRINT TAB 15;"*";
do ASCII.) Se você não colocar o pon- caractere onde você determinar e o res- PRINT TAB 15;"?":
to e vírgula ao final da linha 30, cada tante nas demais posições da mesma Comparado com o PRINT AT, o
letra seráimpressa em uma linha sepa- linha. PRINT TAB economiza trabalho de di-
rada. Os de pontuação e o TAB
sinais
PRINT AT 10,12;"COMPRIMENTO"
gitação e isenta o operador da tarefa de
oferecem tantas maneiras de se exibir lembrar-se dos números de linhas à me-
textos na tela que você encontrará cer- coloca o "C" na linha 10, coluna 12, e dida que vai prosseguindo.
tamente combinações adequadas aos as outras letras em 10,13 10,14.... etc,
,
O
programa a seguir permite que vo-
seus próprios programas. até 10,17.
cê digite as notas dos alunos de uma
Outro recurso interessante do PRINT classe e as disponha ordenadamente na
tela, usando uma série de funções TAB;
AT é que uma linha PRINT pode con-
ter vários AT, separados por pontos e além disso, ele calcula a média das no-
tas (digite tudo em letras maiúsculas, pa-
Aslinhas Sinclair contam com três vírgulas. Por exemplo, a linha osada pa-
ra micros da linha ZX-81):
declarações para posicionamento de tex- ra imprimir quatro asteriscos poderia ser
tos na tela: PRINT, PRINT e AT assim: 10 PRINT "NOME" TAB 12;"PROVA" ;

PRINT TAB. A declaração PRINT so TAB 18 "ORAL" TAB 23;"EXAME";


;
;
;

PRINT AT 0,0,"*"; AT 21,0,"*"; TAB 29; "MED"


zinha imprime uma linha em branco (ve- AT 0,31,"*"; AT 21,31."*" 20 PRINT AT 20,0;"Nonie ?"
ja mais adiante).
30 INPUT nS
Atela do Sinclair tem 22 linhas, nu- PRINT TAB 35 PRINT AT 20,0;"Prova?"
meradas de 0 a 21 , a partir do topo da 40 INPUT np
tela. Cada linha, por sua vez, tem 32 No Sinclair, a instrução PRINT TAB 45 PRINT AT 20,0: "Oral ?"
"colunas", ou posições, para os carac- funciona, em muitos casos, do mesmo 50 INPUT no
teres, numerados de 0 a 31, a partir da modo que PRINT AT. Contudo, exis- 55 PRINT AT 20 0 "Exame?" ,
;

margem esquerda da tela. O comando tem duas diferenças: não é preciso es- 60 INPUT ne
PRINT AT indica onde o texto a ser im- pecificar a linha; e não se pode utilizar 70 LET m={<np+no*2>/3+ne>/2
80 PRINT N$ TAB 14:np; TAB 19;
;

no; TAB 24 ne TAB 29; m


; ;

90 PRINT
100 PAUSE 200
110 GOTO 20
As linhas PRINT, usadas para pedir
os dados iniciais de cada aluno, são po-
sicionadas com o AT na penúltima linha
da tela.
Ao ser rodado pela primeira vez, o
programa limpa a tela e coloca na pri-
meira linha as identificações correspon-
dentes às colunas de dados. Em segui-
da ele perguntará: "NOME?". Digite o
nome do aluno. Depois, perguntará su-
cessivamente as notas da prova, do exa-
me oral e do exame final. Entre núme-
ros inteiros ou, no máximo, com uma
decimal. Em seguida o programa mos-
trará esses dados de entrada, juntamente
com a média. Adicione as linhas:
75 LET M-INT (K*10) /10
76 LET N$-NS(TO 13)
O
primeiro problema é que a média cal-
culada pela última parte dá linha 80 pode
conter muitas casas decimais. Isto é resolvi-
do pela linha 75, por meio de uma opera-
ção de arredondamento do resultado: mul-
tiplicamos a média (M) por 10, tomamos o
valor inteiro do resultado e o dividimos por
um

10. Vejamos a média 7,654321: multiplica-


da por 10, ficaria 76,54321; seu inteiro é 76
um
que, dividido por 10, é 7,6.
Outro problema é que a primeira no-
ta (NP) será mostrada na tela a partir
da coluna 14. Isto quer dizer que o no-
me do aluno não deve ter mais do que
treze caracteres. A função TO na linha
77 "amputa" o nome do aluno de mo-
do a caber nesse espaço. Para interrom-
per o programa sem limpar a tela, pres-
sione <CAPS SHIFT> junto com
< BREAK > (no ZX-8 1 pressione ape-
,

nas <BREAK>). A linha 100 lhe dará


tempo de fazer isso.
O programa abaixo oferece o esbo-
ço de uma contabilidade doméstica:
10 PRINT "NOME" ;TAB 10 "ITEM*
;
;

TAB 26; "PREÇO";


15 LET total^O
20 FOR I-l TO S
35 PRINT AT 20,0; "Data ?"
40 INPUT dS
n
45 PRINT AT 20,0: "Item ?
50 INPUT iS
55 PRINT AT 20 0 "Preço?"
;
.

60 INPUT p Os apóstrofos instruem o computador a colocar o ilem seguinte em uma nova linl
70 LET total=total+p quando a máquina estiver impossibilitada de fazer isso automaticamente.
80 PRINT dSiTAB 10;iS;TAB 26;i Nem todos os computadores, entretanto, contam com esse recurso de pontuação.
90 PRINT
100 NEXT I 30 PRINT TAB t.n; Agora você já sabe como suas men-
"
110 PRINT TAB 26 " ;

120 PRINT TAB 10 "TOTAL" TAB


;
:
... e então compare-a com essa: sagens são organizadas verticalmente na
tela, mas ainda não sabe como elas apa-
26; total 30 PRINT TAB t;n
recerão em cada linha. Suponha que vo-
Use corretamente a pontuação, com Um ponto e vírgula significa: cê queira exibir "OLA" no meio da li-
a declaração PRINT TAB. Normalmen- "Aproxime bem a próxima palavra, sem
te, dois pontos e vírgulas são utilizados
nha. O micro tem uma função (TAB)
nenhum espaço"; uma vírgula significa: que coloca a mensagem no ponto da li-
após PRINT TAB: "Comece a próxima palavra no início nha que você quiser. Acrescente essa li-
10 FOR n-1 TO 21 da coluna 0 ou da coluna 15"; uma de- nha e rode o programa:
20 FOR t-0 TO 24 STEP 6 claração PRINT TAB precisa sempre de
30 PRINT TAB t;n; 40 PRINT TAB(15);"BOA TARDE!"
dois pontos e vírgulas (do contrário, a
40 NEXT t desordem se instalará na tela). Os espaços em cada linha são nume-
50 NEXT li
Quando tiver rodado o programa,
modifique a linha 30 para:
Dl
A maneira mais fácil de exibir uma
rados de 0 a 31 no TRS-Color, e de 0
a 63 no TRS-80. Então, a mensagem na
linha 40 começará no espaço número 15.
Não deixe espaço entre TAB e o parên-
mensagem na tela é: tese, no TRS-Color; senão, (1 5) será tra-
tado como variável e TAB não funcio-
PRINT "OLA"
nará. Veja como TAB calcula o quadra-
Se PRINT "OLA" estiver na última do, o cubo, a raiz quadrada e o inverso
linha da tela, esta rolará para cima, de dos números de 1 a 12:
modo a dar espaço à mensagem (não se 10 CLS
esqueça de digitar as aspas). Limpe a te- 20 PRINT "NUMERO" TAB (6) ; "CUBO" ;

la antes e tudo ficará claro: :TAB{14) ;-QUAD.";TAB(21) "RAIZ" ;

;TAB{27) "INVER"
;

30 FOR J-l TO 12
40 PRINT TAB 1 ) J TAB (7) J* J* J
( ; ; ;

Agora "OLA" aparece no topo à es- TAB(13) ;J*J:TAB(20) INT (SQR ( J);

querda. Acrescente essa linha e rode o 10001/1000; TAB (26) INT ( 1000/ J)
;

programa: 1000
50 NEXT J
Veja como usar um ponto e virgula para 30 PRINT "ADEUS"
preencher a tela com uma mensagem Um problema que deve ser resolvido
(exemplo rodado no Spectrum). "ADEUS" aparecerá abaixo de neste programa, com um pouco de arit-
"OLA". Se quiser uma linha branca en- mética elementar, é que a raiz quadra-
tre "OLA" e "ADEUS", acrescente:
da e o inverso do número J, calculados
pela última parte da linha 40, podem ter
IIIIIIIIIIIUHI 10 r*OG*AMAÇÃOM,C ,0 1H|||||||||||
muitas casas decimais. Isso é resolvido vírgula encontrada tabula para a próxi-
por meio de uma operação de arredon- ma posição).
damento do resultado para conter ape-
nas uma casa decimal: multiplicamos a
raiz quadrada por 1000, tomamos o va-
Os controles de cursor (declaração
lor inteiro do resultado, e o dividimos
por 1000. Vejamos, por exemplo, a raiz
LOCATE), a função TAB e o coman-
7,654321: multiplicada por 1000 ficaria
do PRINT com sinais de pontuação ser-
7654,321; seu inteiro é 7654 que, divi-
vem para melhorar a aparência das exi-
bições na (ela do MSX. A maneira mais
dido por 1000, ficaria 7,654. Se você
Fácil de mostrar uma mensagem é:
quiser imprimir em um lugar específico
na tela deve utilizar PRINT® ("PRINT PBINT "BOM DIA!"
arroba") em vez de PRINT TAB.
O "BOM DIA" aparecerá à esquerda
da tela na próxima linha disponível. Se
Um outro exemplo de tela mostra a PRINT "BOM DIA" estiver na última
attiação do apóstrofo em uma linha da tela, esta rolará para cima, de
10 CLS linha de programa para o Spectrum: modo a dar espaço à mensagem. Não se
20 PBINT §461 "BAIXO" ,

esqueça de digitar as aspas, ou obterá


30 PRINT 67 7 , "ALTO"
40 PBINT §25 7 "ESQUERDA",
uma mensagem de erro. O resultado do
50 PRINT §280 "DIREITA" , comando acima ficará mais claro se vo-
cê limpar a tela antes:
40 INPUT NP
45 PRINT §896, "ORAL "

50 INPUT NO
55 PRINT §896 " EXAME" ,

10 CLS 60 INPUT NE
20 PBINT §925. "BAIXO" 70 LET M= (NP+NO*2) /3+NE) /2
[

30 PRINT §30, "ALTO" 80 PBINT N3;TAB(14) ;NP;TAB(19)


40 PRINT §448, "ESQUERDA" NO; TAB(24) ;NE;TAB(29) ;M
De todas as instruções de posiciona-
50 PRINT §502 "DIREITA" ,

90 PRINT
mento do cursor, a função TAB é, cer-

100 FOR 1=1 TO 400:NEXT I tamente, a mais utilizada. Ela se com-


Os números após PRINT® se refe- porta, na tela, como o recurso de tabu-
110 GOTO 20
rem as locações de tela (numeradas da lação das máquinas de escrever, posicio-
esquerda para a direita, no TRS). O Alinha 20 exibe os cabeçalhos das nando o cursor alguns espaços a partir
TRS-80 tem posições numeradas de 0 a colunas. As linhas 40 a 70 limpam uma da borda esquerda da área de texto da
1023, e o TRS-Color (32 colunas) de 0 linha da leia e perguntam pelos dados tela. Sua forma pode ser:
a 51 Eis um programa que calcula as
1 .
necessários (PRINT@ posiciona a linha
notas dos alunos de uma classe:
que pede a informação na penúltima li- 30 PRINTTAB (15) "BOA TARDE!"
nha da teia). A linha 80 tabula as infor-
Você pode colocar, se quiser, um
mações, e a 90 calcula a média. A va-
ponto e vírgula depois do parêntese,
riável PA faz a máquina checar se a te-
mas isso não é necessário. Não deve
5 CLS la foi preenchida.
10 PRINT "NOME" TAB (12) PROVA" ; existirespaço entre TAB e seu argumen-
;TAB(18) ;'0RAL" TAB (23) to entre parênteses, cujo valor está no
"EXAME" ;TAB{29) "MED" ponto inicial do cordão impresso.
20 PRINT §448 NOME Funções TAB múltiplas podem ser
30 INPUT NS As vírgulas e os pontos e vírgulas utilizadas para posicionar várias obser-
35 PRINT §448 "PROVA" ,
controlam a posição do cursor. Agora vações em cada linha da (ela.
40 INPUT NP digite:
45 PRINT §448, "ORAL " 10 CLS
50 INPUT NO 20 PRINT-0 CURSOR RETORNARA"
55 PRINT §448 "EXAME" .

30 PRINT "SEM O PONTO- E-VIRGULA"


60 INPUT NE 40 PRINT"MAS COM O PONTO-E- Neste caso, B é impresso na coluna
70 LET M= (NP+NO*2) /3+NE) /2 10, e T, na 20 (o valor do argumento
(
VIBGULA ";
80 PRINT NS:TAB(14) ;NP;TAB{19) sempre se refere à distancia da borda es-
50 PRINT" ACONTECE ISTO"
NO: TABI24) ;NE;TAB[29) ;M
querda da área de texto).
90 PRINT Um ponto e vírgula ao final de uma TAB é a abreviação de "tabular".
100 FOR 1=1 TO 400:NEXT I linha PRINT
obriga o cursor a perma-
110 GOTO 20 Veja no programa a seguir como essa
necer onde estava quando terminou de função pode ser útil (ela calcula o qua-
imprimir. Acrescente essas linhas: drado, o cubo, a raiz quadrada e o in-
verso dos números de 1 a 12):
60 P R I NT " E QUE TAL".
5 CLS 70 PRINT"USAR", 10 CLS
10 PBINT "NOME" TAB (12) "PROVA" ;
80 PRINT"VIRGULAS-, 20 PRINT" NUMERO "TAB (10) "QUADRAD
;TAB ( 1 B ;"ORAL" TAB (23);
)
90 PRINT"?" O"TAB(20)"CUB0"TAB{30)"4O POT"
"EXAME" TAB (29] "MED"
:
30 FORJ-1TO20
20 PRINT §896, "NOME No TRS-Color: uma vírgula no fim 40 PRINTJ;TAB(10)J*J;TAB(20) J*J
|
30 INPUT NS de um PRINT faz o cursor saltar para *J;TAB(30) J*J*J*J
35 PRINT §896 "PROVA ,

a outra metade da tela. TRS-80: cada 50 NEXT


um Milin
Ao rodar programa,
o você verá uma gem seguida de um ponto de interroga- virgulas e os pontos e vírgulas contro-
tabela de números sendo montada. To- uma entrada de dados
ção, para efeluar lam a posição do cursor (o quadrado ou
da vez que o programa passar pelo la- com o INPUT. Qualquer que seja
coisa o sinal de sublinha que assinala onde
ço,uma outra linha de números será exi- digitada será armazenada na variável aparecem os caracteres).
bida na tela (TAB permite colocar cada N$. A linha 30 apenas imprime o nome, 10 CLS
número na coluna correta). desta vez na coluna 12 da linha 22. O 20 PRINT"0 CURSOS MUDA DE LINHA
LOCATE não precisa aparecer necessa-
riamenie na mesma linha que o INPUT 30 PRINT"SEM O PONTO-E-VIBGULA"
POSICIONE 0 CURSOR 40 PRINT "MAS COM ELE ';
e o PRINT. Eis aqui um programa que
,

50 PRINT"TUDO MUDA !

Suponhamos que você queira impri- utiliza tanto LOCATE quanto PRINT
TAB e que serve para calcular e exibir Quando ponto
se inclui um e vírgula
mir em um lugar específico na tela, e
as notas dos alunos de uma classe: ao final de uma linha PRINT no pro-
não apenas na próxima linha disponível. grama, o cursor não retorna ao início da
Neste caso. PRINT TAB não é o mais
10 CLS KEYOFF próxima linha: ele permanece exatamen-
indicado: use LOCATE. :

20 PRINT"NOME"TABU0) "NOTA 1"TA te onde estava quando terminou de im-


No MSX LOCATE pode usada
ser
B(20)"NOTA 2"TAB(30)"MEDIA" primir. A próxima declaração PRINT
para controlar o posicionamento do cur- 25 FORX-1T015 continua diretamente depois da última
sor em quaiquer ponto da tela, como 30 LOCATE 0 22 INPUT "NOME " NS
, : ;
declaração. Acrescente essas linhas ao
ocorre com os comandos PRINT AT, 40 LOCATE0 22 INPUT"NOTA 1";N1
. :
programa e rode-o:
PRINT® e HTAB/VTAB de outras 50 LOCATE 0 22 INPUT" NOTA 2";N2
, :

máquinas. Tente o programa abaixo: 60 LOCATE 0 X PRINTNS TAB (10) NI


, : ;
60 PRINT
TAB(20)N2;TAB(30) (Nl+N2)/2 70 PRINT "E QUE TAL",
10 CLS 70 NEXT 80 PRINT"USAR VIRGULAS?",
15 LOCATE 14,23 90 PR1NT-E VER"
20 PRINT-SUL- A linha 20 exibe os cabeçalhos das 100 PBINT"0 QUE ACONTECE?"
25 LOCATE 12.1 colunas no topo da tela. As linhas 30 a
30 PRINT"NORTE" 50 perguntam pelos dados necessários.
35 LOCATE 0,12 LOCATE é necessário para posicionar
40 PRINT" OESTE" Você provavelmente já conhece este
a linha que pede a informação na penúl-
45 LOCATE 25,12 comando:
tima linha da tela; sua não inclusão de-
50 PRINT" LESTE"
sorganizaria a tabela que está sendo PRINT "BOM DIA!
O
programa escreve os pomos car- montada na parte de cima. A linha 60
deais junto às quatro margens da tela. labula a informação que você acabou de
O seu computador imprimirá a men-
LOCATE sagem na primeira linha disponível, co-
A
declaração define, com fornecer à máquina e calcula a média.
meçando no limite esquerdo da tela. Se
dois números, a próxima posição do "
digitar o programa:
cursor da tela de textos. O
primeiro ar-
gumento deve ser um número entre 0 e
39 e diz ao computador da coluna a ser
posicionada. O segundo, um número de
0 a 24, indica a posição da linha a ser
O uso correio dos sinais de pontua- verá que a tela será apagada e que a sua
posicionada. Os argumentos que seguem
ção do PRINT é importante quando se mensagem aparecerá na primeira linha,
está exibindoinformações na tela. As como se tivesse dado uma folha de pa-
LOCATE podem ser números, variáveis
ou expressões com resultado numérico; pel em branco
ao computador.
e somente será considerado o seu valor
Mas é possível fazer com que a men-
inteiro (não fracionário) para o cálculo
sagem apareça numa posição diferente.
Adicione essa linha:
da posição.
Assim, para posicionar uma declara- 30 PRINT TAB ( 15) "BOA TARDE!"
ção PRINT em um ponto escolhido, es-
tabeleça a posição X (para coluna) e Y A mensagemaparece centralizada na

(para carreira) e coloque no programa


tela. A
primeira letra foi colocada na co-
um LOCATE antes do PRINT. luna 15 da linha de impressão. tela de A
textosdo Apple II tem 24 linhas de qua-
renta colunas de largura, cada. Você
COMO POSICIONAR ENTRADAS também pode usar mais que um TAB
por linha:
As entradas de dados através do co-
mando INPUT podem ser posicionadas
da mesma forma que as mensagens que
usam o comando PRINT: Neste exemplo, igualmente produzido a
Ese você quiser pular linhas? É fá-
partirda leia da Spectrum, a
cil: experimente adicionar as linhas abai-
vírgula imprimirá em colunas. Assim:
xo ao seu programa:

"
30 LOCATE 12,22:PRINT "0LA.
:NS:'!-
Os computadores das linhasTRS-Cnlor,
Esse programa imprimirá a primeira MSX, TRS-80 e Apple II contam cum um Um comando PRINT sem nada de-
instrução na coluna 10 e na linha 10, maior número de colunas disponíveis. pois significa simplesmente uma linha
orientando o usuário com uma mensa- em branco na tela.
um
a linha 90 calcula a média.
A média das notas pode dar um re-
sultado com muitas casas decimais (uma
dízima periódica, por exemplo). Ora, es-
se resultado não caberia na linha de te-
la do Apple II, extravasando para a li-
nha seguinte e "estragando" o aspecto
da tela. Isso pode ser resolvido por meio
de uma operação de arredondamento
para que o resultado contenha apenas
uma casa decimal: multiplicamos a raiz
quadrada por 1000, tomamos o valor in-
teiro do resultado, e o dividimos por
1000. Vejamos, por exemplo, a média
7,654321 multiplicada por 1000 ficaria
:

7654,321; seu inteiro é 7654 que divi-


dido por I000ftcaria7,654. Se você qui-
ser um resultado com duas casas deci-
mais, ao invés de três, multiplique e di-
vida por 100. Substitua a linha:

Nas declarações PRINT e INPUT, as virgulas indicam que a informação será exibida em
campos. O 2X-81, o Speclrum e o TRS-Color têm dois campos de demseis colunas;
EmBASIC, a pontuação oferece três
o MSX e o Apple II. (rés campos de oilo colunas; já o TRS-80 conta com quatro campos. possibilidades: a vírgula, o ponto e
vírgula e a ausência de pontuação. O
que seja digitada será armazenada na
ponto e vírgula faz com que o cursor
variável N$. A
linha 30 imprime o no-
não mude de posição após imprimir
me, desta vez na coluna 12 da linha 22. uma mensagem na (ela, o que resulta em
O Apple II tem outro sistema para A ordem em que VTAB e HTAB apa- uma justaposição, se várias delas forem
posicionar mensagens na tela.
recem no programa não é importante. impressas em sequência:
Se você não quiser um ponto de inter- 10 HOME
rogação, omita-o da linha 20. 20 A - 10:B - 20:C - 30
30 PRINT AiB:C
Observe que o semelhante ao
efeito é
do PRINT TAB. Acrescente a linha a Avírgula produz um efeito bem di-
seguir e rode o programa novamente: ferente, Tente adicionar essa linha e ve-
Um ponio de interrogação prejudica- ja o que acontece:
20 VTAB 15 ria a clareza da tela. O programa abai-
xo serve para calcular e exibir 40 PRINT A,B,C
A sua mensagem está agora no cen- as notas
troda tela. Com esses dois comandos, dos alunos de uma classe: A tela, neste caso, é dividida em três
HTAB (abreviatura de horizontal tabu- colunas de tabulação automática e tu-
lation)e VTAB (vertical tabulation),
10 HOME do que for mostrado na tela obedecerá
você pode colocar o cursor (e suas men-
20 INPUT "QUANTOS ALUNOS? " ;A a essa tabulação, exceto se algum dado
30 HOME PRINT "NOTAI ", "N0TA2
:
exceder o tamanho da coluna.
sagens) em qualquer lugar da tela. ", "MEDIA"
40 FOR J - 1 TO A Neste programa mostramos como a
50 VTAB 21: INPUT "NOTAI? ";N1 tabulação automática com a vírgula po-
TABULE AS ENTRADAS de ser útil (ele calcula o quadrado e o
60 VTAB 21: INPUT "N0TA2? ";N2 cubo dos números de 1 a 20):
As entradas de dados através do IN-
PUT podem ser posicionadas da mesma 70 VTAB J + 3: PRINT N1,N2,(N1
forma que as mensagens com PRINT: + N2) / 2
80 NEXT
10 HOME 25 PRINT
20 UTAB 10: HTAB 10; INPUT "SE A
linha 20 exibe os cabeçalhos das
30 FOR J - 1 TO 20
U NOME? ";NS 40 PRINT J,J * J,J *
colunas no topo da tela. As linhas 40 a
30 VTAB 22: HTAB 12: PRINT "OL 50 NEXT
70 limpam uma linha e perguntam pe-
A. *;NS."!"
los dados necessários. O HTAB e o Você verá uma tabela de r

A primeira instrução será


impressa na VTAB antes do INPUT são necessários sendo montada. Toda vez que o progra-
coluna 10 e na linha orientando o
10, para posicionar a linha que pede a in- ma passar pelo laço uma outra linha de
usuário com uma mensagem, seguida de formação na penúltima linha da tela. números será exibida na tela. A utiliza-
um ponto de interrogação, para entrar A linha 80 tabula a informação que ção do TAB permitirá que você coloque
dados com o INPUT. Qualquer coisa você acabou de fornecer à máquina, e cada número na coluna carreta.
IIIIIIIIIIIMH 7 nOGWMAÇÀDDllOGOS 7

COMO DESENHAR UM
LABIRINTO ALEATÓRIO
1E DUAS MANEIRAS DE TORNAR
0 JOGO MAIS DIFÍCIL
DESCUBRA 0 TESOURO

Se você gosta de enfrentar desafios, cilou difícil. Existem muitas maneiras computador. O jogo não envolve ape-
de se introduzir níveis de dificuldade em nas a tentativa de se achar o caminho
aprenda a tornar mais complicados através do labirinto, mas também uma
um jogo, dependendo da sua natureza.
seus jogos de labirinto, incorporando Por exemplo: podemos mudar o núme- limitação no tempo de que dispõe o jo-
a eles níveis crescentes de ro de inimigos enfrentados pelo joga- gador para guiar um homenzinho até
quanto tempo leva dor; desenvolver a açào em diferentes um tesouro desenhado em algum lugar
dificuldade. E veja
velocidades; conceder maior ou menor do labirinto. Não apresentaremos aqui
para encontrar um tesouro oculto no tempo para o jogo; variar os problemas uma versão do programa para micro-
esconderijo de um sanguinário pirata. a serem encontrados pelo jogador, e as- computadores da linha ZX-8 pois o jo-
1 ,

sim por diante. go ficaria excessivamente lento. Tam-


Desta vez, vamos aprender a incor- bém não será apresentada versão para
Muitos programas pedem que se es- porar níveis de dificuldade a um progra- micros da linha TRS-80, devido à baixa
colha um de
nivel de dificuldade, antes ma de jogo de labirinto. O jogo esco- resolução gráfica do vídeo desses mode-
começar o jogo. Essa exigência permite lhido emprega uma entre duas maneiras los.

que tanto os iniciantes quanto os espe- possíveis de se produzir níveis de difi- Existem basicamente duas formas de
cialistas possam utilizar o mesmo jogo, culdade — o método a ser utilizado em aumentar a dificuldade de resolução de
j

sem que este se torne excessivamente fá- detalhe dependerá do modelo de seu um labirinto: ou se altera o limite de i
IIIIIIIIIIHHl^HM^^HMHUIIIIIIIIIII
tempo, ou se varia a complexidade do '

minho aleatório fica contida no interior A linha 10 define os blocos gráficos


labirinto. A
razão pela qual devemos es- da moldura desenhada na tela. Não é para o jogo —
um homenzinho, o tesou-
colher métodos diversos, de acordo com permitido que a linha cruze com ela mes- ro e uma cruz —
por meio da leitura dos
o tipo do computador, tem a ver com ma. Quando o caminho aleatório não dados na linha 490. A variável que ar-
a maneira como o labirinto é produzi- puder prosseguir, o programa fará o mazenará o recorde —HS (high score)
do. Esse exemplo mostra que você pre- mesmo percurso de volta. Ele faz isso — é zerada na linha 20.
cisa decidir o caminho a seguir, quan- passo a passo, examinando a área em A seguir, pede-se ao jogador para es-
do quiser inventar jogos com diferentes torno do caminho anteriormente traça- colher um nível de dificuldade de a 6 1

níveis de dificuldade. do, até encontrar espaço livre para pros- (TA). Quanto menor for o número,
seguir. Quando esse espaço é encontra- mais baixo será esse nível (e, portanto,
do, o programa inicia um outro desvio mais fácil será o jogo). Você verá que
no caminho aleatório, prosseguindo por na linha 40 os números mais baixos es-
ele até ser imobilizado novamente, e as- tabelecem tempos maiores, e os núme-
Uma das maneiras de tornar mais ex- sim por diante. O
computador continua ros mais altos, tempo menores.
citante um jogo de labirinto consiste em tentando desenhar novos caminhos até As cores da tela e dos gráficos são es-
impor algum tipo de penalidade ao jo- que toda a tela seja preenchida; nesse tabelecidas na linha 50. A linha 60 zera
gador que esgota seu tempo sem encon- momento, ele volta ao ponto de partida. o placar e atribui as três "vidas" ao jo-
trar o tesouro. Pode-se, por exemplo, Quando o programa acaba de dese- gador. A linha 70, finalmente, exibe as
fazer com que ele perca alguns pontos nhar o labirinto, apenas um caminho li- palavras ESCORE (contagem) e RE-
na contagem; mas a penalidade mais co- vre aparece na tela; esse caminho pode CORDE, juntamente com os espaços
mum é obrigá-lo a perder uma "vida". ser facilmente distinguido, pois os des- em branco para colocar o
Nesse jogo daremos três "vidas" ao vios não são muito complicados. la-O respondentes, na leia.
jogador: seele não achar o tesouro den- birinto também será solucionável atra-
tro do limite de tempo, em três tentati- vés da regra da mão direita. De acordo
DESENHE 0 LABIRINTO
vas, o jogo terminará. com essa regra, é sempre possível sair de
um labirinto, segumdo-se a sua parede Agora, digite essas linhas:
direita (ou esquerda, tanto faz, desde
LABIRINTOS ALEATÓRIOS que seja sempre a mesma). Para impe- 80 FOR n-22561 TO 225B9: POKE
dir que alguém aplique a regra, basta n,16: POKE n+640 16 NEXT n , :

O jogo é baseado em uma sub-rotina construir algumas ilhas no labirinto, 90 FOR n-1 TO 21: POKE 22528+
de produção de labirintos aJeatórios (ou obrigando o pobre jogador a ficar dan- n*32.16 POKE 22558+n"32 16
: ,

de desenho gerado ao acaso). É um :POKE 22559+n"32.9: NEXT n


seja, do voltas sem fim. Assim, após desenhar
100 LET b-22593: LET a-b
programa muito interessante, pois dese- um labirinto, o programa traça um cer- 110 DIM a!4). LET a(l)--l: LET
nha um labirinto totalmente diferente dc to número de blocos aleatórios que fa- a(2)— 32: LET a(3)-l: LET a (4
cada vez, evitando assim que você tenha zem com que o desenho pareça mais í-32
de projetar uma série enorme desses de- complexo, impedindo que alguém recor- 120 POKE d, 56
senhos. Já mostramos, em um artigo an- ra à regra da mão direita. 130 LET 5-INT (RND*4) + 1: LET <)
terior, como projetar labirintos, utili- Uma vez digitado, guarde o progra- "J
zando linhas DATA
para incorporar o ma em fita ou disco, pois o próximo ar- 140 LET b-a+a O) *2 IF PEEK b-
:

8 THEN POKE b.j: POKE a+a(J>,


seu desenho ao programa. Imagine, en- tigo mostrará como acresceniar a ele al-
tão, como seria complicado incluir vá-
56: LET a-b GOTO 130
i
guns efeitos sonoros. 150 LET IF J-5 THEN ,vjH
rios labirintos ao programa, usando es-
LET 3-1
sa técnica. 160 IF jOg THEN GOTO 140 •

A geração aleatória de labirintos é 170 LET J-PEEK a: POKE a.!>6:


muito mais fácil do què isto, embora IF J<5 THEN LET a-a-a(i)*i:
apresente algumas dificuldades comple- GOTO 130
mentares. Uma maneira óbvia de 0 programa para os micros da linha 180 POKE 2262b, 56
projetá-los, por exemplo, seria desenhar Spectrum começa estabelecendo os blo- 190 FOR n=l TO 20
blocos gráficos aleatoriamente na tela. cos gráficos, introduzindo as variáveis 200 LET K-2252B + 64' IINT (BND'9
fazendo uma preparação geral para )*2)* INT IRND"29)+1
O problema, neste caso, é que nada ga- e
210 POKE k,56: NEXT n
rante que se formem caminhos interio- o jogo. Digite essa seção do programa,
res entre os blocos; ou seja, pode não mas não a execute ainda: A borda do labirinto é traçada pelas
surgir um verdadeiro labirinto. Assim, linhas 80 e 90, colocando-se o código 1
10 FOR n«0 TO 23: READ a:
caso escolhesse esse método, você teria
POKE USH "a"+n,a: NEXT n por mem de comandos POKE nas áreas
que encontrar maneiras de checar a exis- 20 LET ha-0 de memória de vídeo. Esse código defi-
tência de, no mínimo, uma saída. 30 INPUT "Selecione nível (1 ne a cor de fundo (PAPER), gerando
A 6) ";ta portanto uma borda constituída dc blo-
40 LET ta-H00- 100*ta cos vermelhos. As linhas !00 a ISO de-
LABIRINTOS E CAMINHOS AO ACASO 50 BORDER 1 PAPER 1: INK 0:
:
senham o labirinto. Não caia na tenta-
CLS INK 7
:
ção de interromper o programa e lim-
O melhor modo de 60 LET a-0: LET vidas-3
se desenhar labi- par a tela nesse ponto. Se você fizer is-
rintos aleatórios é inventar um progra-
70 PRINT BRIGHT 1; PAPER 6;
INK 2;" SCORE RECORDE so,o labirinto se perderá, pois ainda está
ma que trace caminhos ao acaso, armazenado apenas no arquivo de atri-
incluindo-os depois no desenho final. O •190 DATA 24.24.60,82.62,24,36, butos. Para completar o labirinto, as li-
programa proposto a seguir foi desen- 36. 127. 65, 93. B5, BI, 95, 64, 127, nhas 190 a 210 exibem vinte quadrados
volvido de tal forma que a linha do ca- 24,24.255.255.24.24.24,24 em posições aleatórias dentro do labi-
Illllllll 7 PROGRAMAÇÃO DC JOGOS 7

rinto. Se um quadrado "cair" em cima nativo através de letras, como foi expli- tesde se sortear e exibir um outro tesou-
de uma parede, uma passagem será au- cado anteriormente. As linhas restantes ro a ser encontrado.
tomaticamente aberta. (ou seja, da 300 à 380) se ocupam com
a movimentação do homenzinho no la-
birinto. As linhas 320 a 350 verificam se
COMO CRIAR UM JOGO está sendo pressionada a tecla adequa-
da, e se o próximo quadrado para a mo- A última seção final do programa é
A próxima seção do programa diz vimentação é um caminho e não uma apresentada a seguir. Agora, finalmen-
respeitoao jogo em si (não tente ainda parede. O teste utiliza o ATTR, que já te, você pode rodá-lo.
rodar o programa): foi explicado anteriormente. A linha 260
anula a última posição do homenzinho
J90 PRINT FLASH L| PAPER 0;
INK 5;AT y.x;CHR$ 141,
220 LET X-15: LET y-10 e o exibe novamente em uma posição di- 400 LET vidaa-vidaa-1 FOR f-1
A
:

230 LET tx-INT (RND*15)*2+1 ferente. linha 370 testa se o homenzi- TO 200: NEXT f: IF Vldd9>0
240 LET ty-INT (RNDM 0) "2 + 2 nho atingiu o tesouro. Se ele atingiu, a THEN GOTO 260
250 PRINT BRIGHT L] PAPER 2; contagem de pontos é aumentada, an- 410 IF 3>h3 THEN LET hs-s
AT 0, 7 a; AT 0. 24; ha
;

260 POKE :3672,0: POKE 23673.0


270 PRINT FLASH 1: PAPER 3;
INK 6;AT ty.tx;CHRS 145
280 PRINT INK 2; PAPER 7;AT Y
,x;CHR$ 144
290 IF PEEK 2.T672 + 256-PEEK
23673>ta THEN GOTO 390
300 IF INKEíS'"" THEN GOTO
290
310 LET aS-INKEYS: LET SX-x;
LET ay-y
320 IF aS-"z" AND ATTR ly
>-56 THEN LET X-X-l
330 IF aS-"x" AND ATTH (y
>-56 THEN LET X-X+l
340 IF aS-"k" AND ATTB ty
>-56 THEN LET y--y-l
350 IF dS-"m" AND ATTR fy
>-56 THEN LET W*l
360 PRINT PAPFR >. INK 2
Y.sx;" " AT y,x;CHR$ 144
;

370 IF ty-V ANI' tX-X THEN


GOTO 4 70
580

A inicial do homenzinho é es-


posição
homenzinho
tabelecida pela linha 220; o
começa sempre nas posições 15,10 no
início de cada jogo.
O tesouro é colocado nlcatoriamen-
Imhas 230 e 240, e a linha 270
o exibe na tela. A gama de escolha dos
números aleatórios garante que o tesou-
ro caiu sempre em um
0 exibe os valores do esco-

.
re e do recorde (ambos inicialmente
0), ao passo que a linha 260
— em

cronometro interno por meio


POÍ
Ali
Kmil
dido
para
O
nha 280. Note que os comandi
CH RS 144 e ( II RS 145 da:
nhãs 270 e 280 são utilizado:
para exibir os blocos gráf
cos predefinidos para: 1

esses códigos. O CHRS


é empregado aqui porque é mais fácil de
ser visto na listagem do pn
bora você possa utilizar o método alter-
um CAO DC JOGOS I

420 PRINT BP.ICHT l; PAPER 2; dor para desenhar labirintos aleatórios. Na linha 40, o BS é o tamanho do
AT 0.21; ha Digite o programa, mas não execute ain- bloco gráfico, em pixels. Esse tamanho
430 PBINT FLASH 1;AT 10,1;" P da, senão você obterá um erro do tipo pode variar de sete a doze pixels. NX é
reasione qualquer tecla para
jogar de novo "
UL —
linha indefinida quando o — , o número de blocos na direção horizon-
440 IF INKEYSO"" THEN GOTO programa tentar executar o GOSUB tal, e NY é o número de blocos na dire-

440 1000 da linha 110. ção vertical.


450 IF INKEYS-"" THEN GOTO Antes de desenhar o labirinto na te-
10 PM0DE 4,1
450 la, o computador calculará sua aparên-
20 CLS:PRINT 3193 "NÍVEL DE DIF
.

460 GOTO 30 ICULDADE (0-5)"; cia final e colocará essa informação no


470 LET B-a+ta-PEEK 23672+256* 30 LS-INKEYS:IF LS<"0" OR L$>"5 conjunto P, o qual é dimensionado
PEEK 23673: GOTO 230 " THEN 30 (DIM) na linha 60. O conjunto A con-
Quando o jogador perde uma "vi- 40 BS-12-VAL(L$) :NX-2*INT(.5+12 tém o formato do homenzinho, e o con-
mesmo que a linha 400 sub-
da", e antes B/BS) :NY-2*INT(.5+96/BS) junto B, um espaço em branco, de mo-
traia I ao total de "vidas",
cruzuma 50 SX-250-BS*NX;SY-190-BS*NY do a provocar sua animação gráfica. O
piscante (CHRS 146) é exibida peta li-
60 DIMPCNX.NY) ,A{5) ,B(5) homenzinho é desenhado pela linha 70.
70 PCLS 5: DRAW"S"+STRS(INT(8.5
nha 390. Existe ainda uma pausa antes -4*VAL(LS)/5))*-"C0BM0.OBR2BDNFN Nesse programa o homenzinho será de-
que o jogo retorne à linha 260, a qual GD3NFG" senhado em tamanho maior, quando o
coloca novamente o relógio em 0, de 80 GET ÍO.O)-(BS-l.BS-l) ,A,G caminho do labirinto for mais largo, e
modo a ficar pronto para outra tentati- 90 GET(10,10)-(BS+9,BS+9) ,B,G;C menor quando for mais estreito.
va de atingir o tesouro. Esse retorno, OLOR 5.0 Agora que o homenzinho foi dese-
evidentemente, só ocorrerá se o jogador 100 CLS:PRINT 6226 "GERANDO LAB .
nhado, a linha 80 o coloca no conjunto
ainda tiver mais "vidas" para usar. IRIUTO DE NÍVEL " LS ;
A por intermédio de um comando GET,
Se não restar nenhuma "vida", a li-
110 GOSUB 1000 e a linha 90 preenche o conjunto B de
120 GOTO 120
nha 410 compara o placar final com o branco. Nas lições anteriores, quando
último recorde. O
recorde registrado é A linha 10 diz ao computador para um espaço em branco era utilizado em
alterado quando o escore for maior. Em utilizar o quarto modo gráfico (PMO- um jogo, não era necessário colocar na-
ambos os casos, a linha 420 exibe o re- DE 4) para todo o programa. A tela de da no conjunto: tínhamos apenas um
corde obtido até o momento. alta resolução não é ligada nesse está- conjunto vazio. Desta vez, é necessário
A linha 410 é necessária para blo- gio. A linha 20 exibe, então, a mensa- um espaço em branco, de modo a com-
quear o jogo, caso o jogador ainda es- gem NÍVEL DE DIFICULDADE (0 -

teja pressionando uma das teclas de mo- 5).


vimentação. A linha 420, por sua vez, LS é o nível que o jogador escolheu.
bloqueia o programa até que uma nova O valor numérico de L$ VAL <L$)—
pressão em qualquer tecla assinale que na linha 40 —
regula o tamanho do blo-
o jogador quer prosseguir. co, a extensão do caminho e a comple-
A linha 470 calcula o escore, logo xidade do labirinto. O INKEYS na linha
após o encontro do homem com o te- 30 significa que o jogador não precisa
souro. O teste está na linha 370. digitar mais que o único dígito em res-
posta à pergunta, e que o programa con^
tinua sem que ele precise pressionar
<ENTER>.
A tela de texto proporciona a manei-
ra mais fácil de se desenhar um labirin-
to nos micros da linha TRS-Color. Mas
os labirintos assim obtidos seriam mui-
to simplificados por causa do grande ta-
manho e do pequeno número de blocos
gráficos disponíveis.
Em vez disso, o programa aqui pro-
posto desenha os labirintos na tela com
gráficos de alta resolução. Embora seja
mais complicado do que o que se pode
conseguir na tela de textos, ele tem a
:*
vantagem de desenhar labirintos de di-
ferentes complexidades, fornecendo as-
sim vários níveis de dificuldade.
Imagine que o caminho seja forma-
do por uma série de blocos quadrados.
Se você quisesse desenhar um labirinto
bem simples, bastaria escolher um blo-
co grande, ao passo que, se quisesse um
labirinto mais complexo, deveria optar
por um bloco de menor tamanho.
hA primeira seção do programa intro-
duz as variáveis e prepara o computa-
7 PROGRAMAÇÃO Di JOGOS IHIIIIIIIIIII

binar com a cor de fundo do caminho. ponde a um bloco do labirinto. A sub- da". No início do jogo, o jogador tem
O
comando COLOR
na linha 90 as- rotina armazena o número 5 em P onde três"vidas" LI = 3. —
segura que o labirinto será desenhado quer que exista um caminho, e o núme- O
cronometro interno do computa-
mais tarde na cor correta (de outro mo- ro 0, se existir uma parede. Uma vez que dor é zerado na linha 130, antes que a
do você estaria desenhando um labirin- o labirinto tenha sido armazenado em linha 140 selecione uma posição aleató-
to preto sobre um fundo preto). P, a linha 1090 liga a tela de alta reso- ria para o tesouro. O
elemento corres-
A
linha 100 diz ao jogador que o la- lução e a deixa pronta para a execução pondente em P é examinado para que
birinto está sendo produzido; pode de- do desenho. haja certeza de que nesse lugar há um
morar algum tempo até o desenho apa- As linhas 1 100 e 1 120 exibem o labi- caminho e não uma parede. Se o tesou-
recer. rinto na tela mediante a verificação dos ro estiverem um caminho, o valor do
conteúdos de P. Quando um 5 for en- conjunto será modificado de 5 para 7.
contrado, um quadrado branco será im- A última parte da linha desenha o tesou-
DESENHE 0 LABIRINTO ro no labirinto.
presso.
A posição do homenzinho ê calcula-
Agora digite a sub-rotina de produ- da na linha 150, levando-se em conside-
MOVIMENTO, TESOURO. VIDAS
ção do labirinto —
chamada pela linha ração a largura do caminho, que é o ta-
110 —
e você poderá rodar o programa: manho do bloco BS. A linha 160 colo-
Agora você precisa de um jogo para ca o homenzinho em posição.
1000 FOR J-0 TO NX:P(J.NY)-6:P<
J,0)-6:NEXT acompanhar o seu labirinto aleatório. As linhas 170 a 220 examinam o te-
1010 FOB J-0 TO NY-2:P(0. J)-6:P Digite a próxima seção do programa, clado por meio de comandos PEEK, de
(NX.J)-6:NEXT mas não o rode porque ele chamará uma modo a permitir a movimentação do pi-
1020 X-2;Y-2:LX-2:LY-2 sub-rotina que ainda não existe. rata no labirinto. Como não é possível
1030 J-RND(4)-1:G-J deixá-lo atravessar paredes, a linha 220
1040 Y-LY+2» (J-0) - (J-2) :X-LX+
( )
120 •2: Y-2r LX'2 :LY-2:T1 -800 o mantém dentro do caminho. A linha
2*({J-3)-!J-D) -3 210 verifica se o tesouro foi encontra-
1050 IF P(X.Y)-0 THEN P[X,Y)-J+ 130 TIMER=0 do, examinando o elemento correspon-
1 : P (

Y-Y:GOTO 1030
(X+LX) /2. CY+LY) /2) -5 LX-X L : :
140 XW
+ HNDÍNX- 3) :Y1-HRND(N¥-
dente em P para o número 7. Se o com-
3):IF P(Xl,Yl>-5 THEN PIX1.Y11- putador o achar, o "indicador de desco-
1060 J-(J+1)AND 3: IF JOG THEN 7:DRAW " S4 CO BM " + STRS SX *-X 1 *BS * ( )

1040 " " + STRS (SY+Y1"BS)+"BFR5D5L3U3B berta" (F) será igualado a 1.

linha 230 movimenta o pirata. O


A
.

1070 J-P(LX.LY)-1:P(LX.LY)-5:IF D" ELSE 140


J<4 THEN LX-LX-2* [ (J-3) -ÍJ-1) 150 XI =X*BS+SX Y1=Y*BS+SY :
espaço em branco é colocado, com o co-
:LY-LY-2M(J-0)-(J-2)> GOTO 103 :
160 PUTIXl Yli - (Xl+BS-1 Yl+BS-1
. , mando PUT, sobre a última posição do
D I A PSET
, ,
personagem, e sua localização atual
1080 FOR J-0 TO 20 P [2 + 2*RND ÍN : (
170 IF PEEK (338J-251 THEN Y = Y- torna-se a última posição.
X-3)/2) ,l+RND(NY-3) )-5:P(l+RND( 1 A linha 240 calcula o escore, caso o
NX-3) 2+2*P,ND( (NY-3J/2) -5: NEXT
.
)
180 IF PEEX (3421=253 THEN Y-Y + tesouro tenha sido encontrado. O limi-
1090 SCREEN 1,1:PCLS 1
te de tempo é diminuído então de 10 se-
1100 FOR J-2 TO NX-2:FOR K-2 TO 190 IF PEEK (3401-247 THEN X-X-
MY-2 1
gundos. O
F volta ao 0, e o programa
1110 IF P(J,K)-5 THEN LINE(J*BS retorna para zerar o cronometro. O pro-
200 IF PEEK (338J-247 THEN X = X +
+SX. K*BS+SY) - J+l) «BS+SX-1 (K+
( ( .
1 grama continua, redesenhando o tesou-
1) *BS+SY-1) PSET BF , ,
210 IF PÍX.Yi-7 THEN F=1:P(X.Y) ro em outro lugar, deixando o pirata no
1120 NEXT K J RETURN , :
-5: GOTO 2 30 mesmo ponto em que estava quando o
linhas 1000 a 1080 "desenham"
As 220 IF P(X,Y)<>5 THEN X-LX:Y-LY último tesouro foi encontrado.
:GOTO 170 Caso o tesouro demore muito a ser
o labirinto na memória do computador 230 IF XOLX OR YOLY THEN PUT
e armazenam a sua forma no conjunto encontrado, a linha 250 chamará a sub-
(XI. YD" (Xl+BS-1. Yl + BS-1) .B.PSE
P — cada elemento do conjunto corres- T:LX-X:LY-Y:FOR P-l TO 68:NEXT rotinaque se inicia na linha 500. Se,

240 IF F-l THEN F-0 SC-SC+ (TI-T :


mesmo não tendo achado o tesouro, o
IMER) TI-TI -10 GOTO 130
: :
homenzinho ainda dispuser de algum
250 IF TIMER >TI THEN GOSUB 500 tempo, a linha 260 retornará ao progra-
:IF LIO THEN 100 ma, calculando sua nova posição.
260 GOTO 150
A EXIBIÇÃO DO ESCORE
A linha 120, que substitui a linha 120
da seção anterior, contém as variáveis Esta é a sub-rotina final. Ela exibirá
a partir das quais é calculada a posição o escore e o número de "vidas", depois
do homenzinho. X, Y é a localização que uma "vida" for perdida:
atuaJ do homenzinho, e LX e LY, sua
última posição; porém, em virtude da 500 CLS:SCREEN 0.0:LI-LI-1
largura variável do caminho, os valores 510 PRINT #106."NIVEL-";L$
devem ser ligeiramente ajustados um 520 IF LI>0 THEN PRINT §202. 'VI
DAS-" LI
pouco anles de o homenzinho aparecer
;

530 PRINT ê298."SC0RE-";SC


na tela. TI é o limite de tempo para des- 540 IF LI>0 THEN FOR J-l TO 600
cobrir o tesouro. Esse tempo limite é de 0 : NEXT TIMER- 0 SCREEN 1.1:RETUR
; :

dezesseis segundos. Se o homenzinho N


não tiver encontrado o tesouro, quan- 550 PRINT §358 "QUER OUTRA VEZ
,
I

do o tempo se esgotar, perderá uma "vi-


IIIIIIIIIHHHHIHH^HHHHIIIIIIIIIII

Um pirata à procu Oulro bucaneiro explora c rido labirinto do Spectrum.

560 AS-INKEYS:IF ASO"S" AND AS A primeira seção do programa intro- tal, e NY é o número de blocos na dire-
<>"N" THEN 560 duz as variáveis e prepara o computa- ção vertical.
570 IF AS-"S" THEN RUN
dor, de um modo geral, para desenhar Antes de desenhar o labirinto na te-
580 END
labirintos aleatórios. Digite o programa, la, o computador calculará sua aparên-
Agora você pode rodar o programa. mas não o execute ainda, pois não apa- cia final e colocará essa informação no
Se uma "vida" for perdida, o progra- recerá nada na tela, por enquanto. conjunto P. que é dimensionado (DIM)
ma religa a tela de texto —
SCREEN
10 SCREEN 0
na linha 60. A variável AS contém o for-
0,0. A linha 500 também diminui de 1 mato do homenzinho, e a variável BS,
20 LOCATE 2,11:PH1NT "Nível de
o número de "vidas" restantes do joga- uma cruz, para assinalar sua "morte".
dificuldade (0-5) ?"
dor. 30 LS-INKEYS:IF LS<"0" OR LS>*5 A variável CS contém a imagem do te-
As linhas 510 a 530 exibem o nivel de " THEN 30 souro. Os códigos gráficos correspon-
dificuldade, o número de "vidas" res- 40 BS-13-VAMLS) :NX-2*INT<.5+12 dentes são lidos em DATA, na linha
tantes (se o jogo continuar) e a conta- 6/BS) :NY-2*INT(.5+96/BS) 1 10, e concatenados nas variáveis alfa-

gem de pontos. Se ainda sobrarem al- 50 SX-250-BS*NX:SY-190-BS*NY numéricas mencionadas. Posteriormen-


gumas "vidas", a linha 540 introduzirá 60 DIM P(NX.NY) te, esses blocos gráficos serão colocados
uma pausa antes de zerar o cronometro, 70 FOR 1-1 TO 8
dentro de sprites.
60 READ A,B,C:AS"AS+CHR$ (A)
religando a tela de alta resolução e re-
84 BS-BS+CHRS (B)
O computador limpa a tela de textos
tornando à sub-rotina. na linha 100, e esta informa que o labi-
88 CS-CS+CHRS (C)
As linhas 550 e 580 perguntam se o 90 NEXT rinto está sendo produzido.
jogador quer tentar de novo, e ele ou pá- 100 CLS:LOCATE 2,11
ra o programa ou roda novamente. O 105 PRINT 'Gerando labirinto de
RUN é utilizado na linha 570 para lim- nível ":LS
par P para um novo labirinto. 110 DATA 24,24,127,24,24,65,60,
255,93.82,255,65,82,24,81,24.24 Agora, digite a parte do programa
,95.36.24,64.36,24.127 que produz o labirinto, e rode-o para ver
A
linha 10 diz ao computador para
o resultado:
utilizar a tela de textos (SCREEN 0). A
A versão do programa para os micros linha 20 exibe, então, a mensagem: "Ní- 1000 FOR J-0 TO NX
da linha MSX desenha os labirintos na vel de dificuldade (0 - ?" 1005 P(J,NY)-6:P(J,0)-6
5)
1008 NEXT
tela com gráficos de aJta resolução. Em- L$ é o nível que o jogador escolheu.
1010 FOR J-0 TO NY-2
bora mais complexa do que o programa O valor numérico de LS —
VAL (L$) 1014 P(0,J)-6:P<NX.J)-6
para se desenhar na tela de textos, ela na linha 40 — regula o tamanho do blo- 1016 NEXT
tem a vantagem de poder traçar labirin- co, a extensão do caminho e a comple- 1020 X-2:Y-2:LX-2:LY-2
tos de diferentes complexidades, forne- xidade do labirinto. O INKEYS na linha 1030 J-INT(RND(1)*4> :G-J
cendo assim uma variação no nível de 30 significa que o jogador não precisa 1040 Y-LY*2*((J-0)-(J-2)) :X-LX+
dificuldade. digitar mais que um único dígito em res- 2"(<J-3)-(J-l>)
O caminho aleatório é formado por posta à pergunta, e que o programa con- 1050 IF P(X,Y>-0 THEN P(X.Y)-J+
uma série de blocos quadrados. Se você tinua sem que ele precise pressionar
l:P((X+LX)/2. (Y+LY)/2)-5:LX-X:L
quisesse desenhar um labirinto bem sim- <ENTER>. Y-Y:GOTO 1030
1060 J-ÍJ+l) AND 3:IF JOG THEN
ples, bastaria escolher um bloco gran- Na linha 40, o BS é o tamanho do 1040
de, ao passo que, se quisesse um labi- bloco gráfico, em pixels. O tamanho po- 1070 J-P(LX.LY)-l:P(LX.LY)-5
rimo mais complexo, teria que optar por de variar de oito a doze pixels. NX é o 1075 IF J<4 THEN LX-LX-2* J-3) ( (

I um bloco de menor tamanho. número de blocos na direção horizon- -<J-1) ) :LY-LY-2«( (J-0)-(J-2) :G )
IIIIIIIIIIIHI ' nOGRAMAÇÃODUOGOS 7 lllllllll
OTO 1030 (cada elemenlo do conjunto correspon- drado será impresso (comando LINE de
1080 FOR J-0 TO 20 de a um bloco do labirinto). A sub- bloco cheio) na linha 1110.
1082 P(2+2«INT(RND(l)*(<NX-3)/2 rotinaarmazena o número 5 em P onde
1+INT (RND(1 * (NY-3)
)
-5 )
) )
quer que exista um caminho, e o núme-
, )

1085 P(l+-INT<RMDU)MNX-3)) ,2 + 2
INT (RND (1 * (NY-3J/2) -5
)
! )
) ro 0 faz o mesmo, caso exista uma pa-
1088 NEXT rede. Agora você precisa de um jogo para
1090 SCREEN 2,0 Uma vez que o labirinto tenha sido divertir-se com o labirinto aleatório. Di-
1092 COLOR 1.10,4 armazenado em P, a linha 1090 liga a gite a próxima seção do programa; mas
1094 SPRlTES(l)- AS tela de alta resolução, e a linha 1092 de- não o rode, pois ele chamará uma sub-
1098 SPRITEStO)- BS fine as cores de frente e de fundo do de- rotina que ainda não existe.
1099 SPRITES(2)-CS senho. As linhas 1094 a 1099 definem os
1100 FOR J-2 TO NX-2 sprites correspondentes aos blocos grá-
1105 FOR K-2 TO NY-2 1200 X-2:Y-2:LX-2:LY-2
ficos montados na seção anterior do 1210 TI-800:LI-3
1110 IF PU.K)-5 THEN LINE (J*B
S>SX, K*BS+SY] - ( J+l «BS+SX-1
(
)
K , (
programa. Note que o sprite do bloco 1215 R-RND (-TIME1
+1)«BS+SY-1) ,4,BF em branco tem prioridade sobre o blo- 1220 TIME-0
1130 NEXT K co do homenzinho. As linhas 1100 a 1230 Xl-l+INT(RNDU)MNX-3])
1140 NEXT J 1 140 exibem o labirinto na tela median- 1240 Yl-l*INT(RNDÍl)*(NY-3))
te a verificação dos conteúdos de P. 1250 IF P(Xl,Yl)-5 THEN P(Xl.Yl
linhas 1000 a 1080 "desenham"
As )-7:PUT SPRITE 2 (SX+X1*BS SY+Y
Quando um 5 for encontrado, um qua- , ,

o labirinto na memória do computadoi 1*BS) .10 ELSE 1230


e armazenam sua forma no eonjuni 1255 X1-X"BS+5X:Y1-Y*BS+SY
1260 PUT SPRITE 1,(X1.Y1),1
1270 TS-INKEYS:IF TS-"" THEN 12

1280 IF ASC(TS)-28 THEN X-X+l


1290 IF ASC(TS)-29 THEN X-X-l
1300 IF ASC(TS)-30 THEN Y-Y-l
1310 IF ASC(TS)-31 THEN Y-Y+l
1320 IF P{X.Y)-7 THEN F-1:P(X,Y
)-5:GOTO 1330
1325 IF P(X,Y)OS THEN X-LX:Y-L
Y:G0TO 1270
1330 IF XOLX OR YOLY THEN LX-
X:LY-Y
1340 IF F-l THEN F-0 SOSC* (TI- :

TIME) TI-TI-10 GOTO 1220


: :

1350 IF TIME>TI THEN GOSUB 1500


:IF LK1 THEN 1000
1360 GOTO 1255

A linha 1200 contém as variáveis a


partir das quais a posição do homenzi-
nho é calculada. X e Y são as coorde-
nadas da posição aluai do homenzinho,
e LX e LY, da última posição. Tl é o
ite de tempo para descobrir o tesou-

ro, e LI, o número de "vidas" de que


)gador dispõe. O
tempo limite é de
cerca de dezesseis segundos; se este
se esgotar sem que o tesouro tenha
sido encontrado, o homenzinho perde-
rá uma "vida". No início, o joga-
dor tem três "vidas".
A linha 1215 introduz o gerador de
números aleatórios, usando como "se-
mente" o valor armazenado no crono-
metro interno, naquele instante. O cro-
nometro interno do computador é zera-
do na linha 1220, antes que as linhas
1230 e 1240 selecionem uma posição
aleatória para o tesouro. O elemento
correspondente em P é examinado na
li-

nha 1250, para verificar se nesse lugar


há um caminho ou uma parede. Se hou-
ver um caminho, o valor do conjunto se-
rá modificado de 5 para 7. A última par-
te da linha desenha o tesouro no labi- I
rinto.
IIIIIIIIIIHt ' PROGRAMAÇÂODUOOOS 7 llllll
A posição do pirata é calculada na li- nha 1220 para zerar o cronometro. O
nha 1255, levando-se em conta a largu- programa continua, redesenhando o te-
ra do caminho, que é o tamanho do blo- souro em outro lugar, mas deixando o
1520 FOR J-l TO 6000:NEXT
co BS. A linha 1260 coloca o homenzi- pirata no ponto em que ele estava quan-
1525 LINE(0,0)-(255.7) .10.BF
nho na tela, naquela posição. do o último tesouro foi encontrado. 1530 IF LI>0 THEN PUT SPRITE 0,
As linhas 1270 a 1310 examinam o te- Se o jogador demorar muito para 1-20,-20) :CL0SE |1 TIME-0 :RETUR :

clado através do comando INKEYS, de achar o tesouro, a linha 1350 chamará N


modo a permitir a movimentação con- a sub-rotína que se inicia na linha 1500 1540 PSET(0,0) ,4:PRINT II," Que
tínua do homenzinho, no labirinto, co- (ela será apresentada a seguir). Essa sub- r jogar novamente ? (S/N)"
mandado pelas teclas de controle do cur- rotina diminui uma "vida" do jogador; 1550 AS-INKEYS:IF ASO"S" AND A
sor. A linha 1325 faz com que ele se caso tenha se esgotado o número de SO"N- THEN 1550
mantenha dentro do caminho, de mo- "existências", o programa retornará ao 1560 IF AS-"S" THEN RUN
1570 END
do a impedi-lo de atravessar alguma pa- começo (linha 1000). Se o homenzinho
rede. A linha 1320 checa se o tesouro foi não tiver achado o tesouro e ainda dis- Rode o programa: se uma "vida" for
encontrado, examinando o elemento puser de algum tempo, a linha 1360 fa- perdida, ele diminuirá de 1 o número de
correspondente em P para o número 7. rá o programa voltar à linha 1255, per- "existências" restantes (linha 1500). A
Quando o tesouro é encontrado, o "indi- mitindo que sua nova posição seja cal- linha 1505 assinala a "morte" do per-
cador de descoberta" (F) é igualado a 1 culada. sonagem.
A linha 1330 promove a movimenta- As
linhas 1510a 1530 exibem o nível
ção do homenzinho, fazendo com que de dificuldade, o número de "vidas"
a localização atual torne-se a última po- restantes e a contagem de pontos. Caso
sição. Como o homenzinho é definido
1
ainda sobrem vidas' a linha 1 530 co-
'
' ,

por intermédio de um sprite, não é ne- A sub-rotina final exibirá o escore e locará o cronometro em 0.
cessário apagá-lo do lugar onde estava, o número de "vidas" restantes depois As linhas 1540 a 1560 perguntam se
como em outros computadores. que uma "vida" for perdida: o jogador quer tentar de novo; depen-
A linha 1340 calculará o escore, se o 1500 LI-LI-1 dendo da resposta, elas param o progra-
tesouro for encontrado. O limite de tem- 1505 PUT SPBITE 0,{X1,Y1),1 ma ou o rodam novamente. O RUN é
po é diminuído de 10 segundos. O F re- 150 7 OPEN "GRP " FOR OUTPUT AS
:
utilizado na linha 1560, limpando P pa-
torna ao zero e o programa volta à li- tl ra um novo labirinto.

UMA TÉCNICA DE ANIMAÇÃO DE BLOCOS GRÁFICOS NOS


MICROCOMPUTADORES DA LINHA TRS-8Ô.
Os micros da por serem
linha TRS-80, Acrescentamos a seguir a linha do cos gráficos, e repetindo o truque de des-
de tecnologia mais antiga do
que os da meio da figura. Mas, se nos limitarmos cer uma posição e recuar o cursor cinco
nova geração de computadores pessoais a concatenar os próximos caracteres grá- posições:
tSinctair Spectrum, MSX, TRS-Color), ficos ao DS já definido, na hora de colo-
contam com menores recursos para a de- car o disco voador na tela por meio de
- CHRSU28)+CHRS(186) +
AS
finição de blocos gráficos IUDG, ou user um PRINT® o desenho sairá errado (em
,
CHRS(176)+CHRS<186)+
= defined graphicsj além de terem uma vez de se posicionarem uma embaixo da
CHRS (144) +BS+CHRS (170)+
resolução gráfica na tela (128 x 48 pixels) outra, as duas linhas ficarão fundidas em
STRINGS (4 171 }+BS+
.

insuficiente para a programação de efei- uma única linha). Para evitar isso, temos CHRS (128) +STRINGS (3,131)+
tos visuais mais sofisticados. que fazer com que o cursor se posicione CHRS (129)
Existem, porém, formas de contornar no ponto certo, abaixo da primeira linha
esse problema. Assim, para definir e ani- do gráfico. Para isso, usamos os códigos
mar blocos gráficos no TRS-80, utiliza- de controle: CHR$(26>, que tem o efeito
O bloco gráfico está definido. Para de-
senhar, de uma vez só, esse bloco em um
mos três conceitos básicos de programa- de descer o cursor do PRINT de uma po-
ponto qualquer da tela (por exemplo, na
ção: como incorporar caracteres gráficos sição na tela, e CHRS(24), que recua o
posição N), basta dar o comando:
a variáveis alfanuméricas (cordões): co- cursor, sem limpeza.
mo usar os caracteres de controle do cur- Dessa forma, para posicionar o cur- PRINTSN.AS;
sor para definir figuras complexas, e co- sor corretamente na linha seguinte do grá-
mo movimentar blocos gráficos por meio fico, lemos que descer uma posição com
Para animar o bloco gráfico contido
do comando PRINT®. o cursor e recuar cinco posições. Para
Como a utilização desse comando já economizar tempo de digitação, podemos
em AS, variamos o valor de JV,
colocando-o dentro de um laço de pro-
foi explicada, abordaremos aqui apenas definir um cordão BS, que incorpora to-
a técnica de definição de figuras com- dos esses CHRS:
grama. Se o valor de N
for aumentado
ou diminuído de 64, em cada repetição
plexas.
do laço, a movimentação se dará no sen-
imagine que queremos definir um dis- BS - CHR$(26)+STRINGS(5,24)
Por outro lado, se esse va-
tido vertical.
co voador. Para montar afigura em uma
E agora AS fica definido assim: lor for aumentado ou diminuído de 1, o
única variável alfanumérica (por exem-
movimento se fará no sentido horizontal.
DS) concatenamos os caracteres grá-
plo,
AS - CHRSU28)+CHRS(186) + Para apagar o bloco gráfico do lugar
ficos que determinam a primeira linha
CKRS!176)+CHRS(186)+ onde estava, é necessário colocar por ci-
(veja no manual do seu computador os
CHRS 144) +BS+CHRS (170)+
( ma dele um terceiro bloco gráfico previa-
códigos gráficos correspondentes):
STRINGS(4,171) mente definido, contendo apenas três li-
A3 - CHRS(12e)+CKRS(186)+ nhas de cinco caracteres em branco, con-
CHRS (176) +CHRS (186)4 Finalmente, podemos completar a fi- catenadas por meio do cordão de contro-
CHRS (144) gura, adicionando a terceira linha de blo- le, BS, definido acima.
" " (

Ill II PROGRAMAÇÃO B imiiiiiiiiiiii

MÉTODOS MAIS RÁPIDOS COM


E PROGRAMAS DE DESENHOS NA
INKEYS OU GET

0 COMANDO INPUT E AS TELA


MENSAGENS DE PRONTIDÃO ENTRADAS DE SENHAS SECRETAS

se de mísseis. Mais comumente, porém, < ENTER > ou < RETURN > , a men-
Grande parte dos programas para micros
consiste na digitação de números ou tex- sagem digitada (qualquer que seja ela) é
exige que o usuário digite tos como acontece, por exemplo, em pro- colocada em uma variável N$, no caso —
dados e outras informações necessárias gramas para bancos de dados. No caso do programa acima.
de um jogo, a maior exigência é que o Neste exemplo, a variável é um cor-
ao seu funcionamento. A maneira
dão alfanumérico, mas variáveis numé-
computador responda de modo rápido.
como isso é feito tem uma importância ricas também podem ser utilizadas. No
programa seguinte, mostraremos como
fundamental. Veja por quê.
se faz uma lista de cinco nomes e ida-
des, empregando comandos INPUT
Com muito poucas exceções, os com- Um
dos primeiros programas execu- simples. Esse programa utiliza dois con-
putadores não funcionam inteiramente tados pelos iniciantes e que ilustra o uso juntos para armazenar informações
sozinhos, dando saída a informações. do comando INPUT é o seguinte: (mais adiante, abordaremos numa lição
específica a questão dos conjuntos e de
Quase todos os programas, desde jogos
até aplicações comerciais e científicas,
exigem do usuário algum tipo de entra-
biOE como funcionam).

da. Entretanto, há informações que po- 10 PFUNT-QUAL E O SEU NOME?"


dem ser fornecidas diretamente ao com- 20 INPUT U$
5 DIM NOMES (5) IDADE (5)
30 PRINT"OLA, ' ;NS
,

putador, e existem inúmeras maneiras 10 FOR N-l TO 5


pelas quais isso pode ser feito, para os 20 PRINT"NOME:
vários tipos de programa. Ao deparar-se com um INPUT dentro 30 INPUT NOMES (N)
A informação pode ser tão simples de um programa, o computador pára o 40 PRINT" IDADE :

quanto a pressão sobre uma tecla de con- processamento e espera até que o usuário 50 INPUT IDADE ÍN)
trole do cursor para direcionar uma ba- digite algo. Após terem sido pressionados 60 NEXT N
70 FOR N-l TO 5
60 PRINTNOMES IN) ;
" TEM " ; IDADE
N) ;
" ANOS DE IDADE*
"

IIIIIIIIIIIHI llllllllll
A mensagem de prontidão é necessá-
ria até mesmo nos programas mais sim-
S DIM nS(5,10) DIM a(5) : ples, pois o usuário tende a esquecer fa- 100 PRINT "DIGITE DATA (EM FORM
10 FOR n-1 TO 5 cilmente a forma exata pela qual a in- ATO DD/MM/AA)
20 PRINT "Nome: " formação deve ser entrada. Por exem- 110 INPUT DS
30 INPUT tlS(n) plo, a entrada de datas. A maior parte
40 PRINT "Idade: "
dos programas de contabilidade, além
A mensagem serve não somente pa-
50 INPUT a (n) ra lembrar o usuário de que uma data
55 CLS de muitos outros, requer a entrada de
NEXT n é necessária, como também para defi-
datas pelo usuário. Em alguns casos, es-
:

60 FOR n-1 TO 5 nir a forma como ela deve ser entrada


70 PRINT nS(n) " tem ";a(n)i" sa informação é utilizada pelo progra-
:
(o que se denomina formato de entrada
anoa de idade" ma, seja em rotinas de pesquisa, quan-
do dado). Se você quiser entrar, por
BO NEXT n do se deseja encontrar um dado especí-
exemplo, 3 de setembro de 1945, deve-
fico, seja na ordenação cronológica de
Nos computadores da linha ZX-81, rá digitar: 03/09/45.
uma série de eventos, por exemplo. Nes-
digite tudo com leiras maiúsculas. Omi-
te caso, é preciso estabelecer que uma
O formato de entrada poderá ser
ta as linhas 5 e 55, e acrescente: qualquer um que o programa desejar,
data seja sempre entrada segundo uma
DIM NS(5,10) desde que o usuário seja informado, por
5 forma padronizada.
7 DIM A (5) Um método comum é utilizar seis dí- meio de uma mensagem adequada.
55 CLS
gitos para uma data, ou seja, dois dígi-
A utilização do comando INPUT,
57 NEXT N
tos para o
como foi mostrada até agora, é bastan-
dia, dois para o mês, e dois
te simples. Mas ela pode ser ainda mais
A informação fornecida ao usuário para o ano. Muitas vezes empregam-se
simplificada no caso de alguns compu-
deve estar correia. Da mesma forma, o barras ou pontos para separar os três pe-
tadores, que permitem a inclusão da
usuário precisa entrar exatamente o ti- ríodos. Uma rotina típica de entrada de
po de informação solicitada. Se você di- dados através de um INPUT seria:
mensagem de prontidão no próprio co-
gitar um nome quando for perguntada
mando INPUT. Esse recurso só não
existe nos micros da linha ZX-81 Vol-
uma idade, o programa será interrom- .

tando ao programa de nome e idade, eli-


pido. No entanto, rodar o programa
mine as linhas 20 e 40 e reescreva as li-
mais uma vez leva quase sempre à per-
da de tudo o que já foi entrado, obri- nhas 30 e 50, como mostramos a seguir:
gando o operador a um duplo trabalho.
Isso não constitui problema se forem
apenas cinco entradas; mas quando se
trata deum programa extenso, esse es-
forço pode ser desgastante.

UTILIZE MENSAGENS DE. PRONTIDÃO

Embora pareça simples, o programa


acima tem uma característica importan-
te, que é a mensagem de prontidão con-
tida nas duas declarações PRINT. Essa
mensagem faz com que o programa di-
ga ao usuário que tipo de informação ele
deve digitar pelo teclado.
Se as linhas 20 e 40 do programa fos-
sem apagadas, ainda assim ele funcio-
naria, pois, na maioria dos computa-
dores, toda ocorrência de um INPUT
provoca o aparecimento de algum si-
nal de prontidão na tela (por exemplo,
um ponto de interrogação).
Se você já está familiarizado com
computadores, o sinal de prontidão do
INPUT é su ficiente, quase sempre, pa-
ra lembrá-lo de que alguma coisa preci
sa ser entrada. Ele é insuficiente, porém,
para lhe dizer qual o tipo de informa-
ção a ser digitada, imagine, por exem-
plo, que o programa lhe é estranho, que
talvez você não tenha experiência em li-
dar com o computador ou que não te-
nha conhecimento de como ele funcio-
na. Neste caso, um ponto de ínterroga-
Ição causa apenas estupefação...
IIIIIIIIIIIHH llllllllll
a dos micros (com exceção pressionar a tecla < ENTER > Se essa . guns micros possuem um comando que
do TRS-Color), se não for colocado um norma não é seguida a maioria dos mi- contorna essa dificuldade. Os computa-
espaço em branco antes do segundo si- cros interrompe o programa, colocan- dores da linha Sinclair, por sua vez, têm
nal de aspas, na mensagem de pronti- do um duplo sinal de interrogação na li- um modo especial de evitá-la.
dào. o ponto de interrogação aparecerá nha seguinte. A solução mais comum é incluir a en-
colado a ela. Por isso, se você quiser dar No men-
Sinclair é possível dividir a trada entre aspas. O ZX-81 e o Spectrum,
maior clareza à mensagem, coloque o es- sagem de prontidão em mais de uma, na por exemplo, colocam aspas automatica-
paço em branco adicional. mesma linha. Se cada mensagem de mente na tela quando uma variável alfa-
Com exceção do Sinclair Spectrum, prontidão for mantida entre aspas, o numérica aparece em um comando IN-
é possível compactar ainda mais a roti- computador se limitará a imprimi-las, PUT. Em relação aos outros computado-
na de entrada de dados. Assim, as linhas sem tratá-las como variáveis. res, o operador deve digitar as aspas co-
30 e 50 do programa anterior poderiam Entretanto, note que não é possível mo pane da entrada (essa exigência, por-
ser substituídas por apenas uma: fazer isso nos computadores das linhas tanto, deve ser apontada ao usuário, atra-
TRS-Color, Apple, TRS-80, MSX e vés da mensagem de prontidão).
ZX-81 Para melhorar a disposição das
. Uma outra solução, disponível nos
informações na tela, as mensagens de computadores TRS-80, TRS-Color e
(Não se esqueça de apagar a linha prontidão dos INPUT podem ser posi- MSX, consiste em utilizar o comando
50.) cionadas por intermédio de comandos LINE INPUT. Este é empregado exa-
No Spectrum, é necessário colocar so- TAB normais (conforme foi explicado tamente do mesmo modo que o INPUT.
mente uma variável por comando IN- anteriormente, na lição sobre o uso des-
PUT, de modo que o usuário deve pres- sa função).
sionar duas vezes o < ENTER > No ca-
.

so do TRS-Color, do TRS-80, do MSX COMO ENTRAR UMA UNHA COMPLETA


e do Apple II, além de se poder utilizar
o método do Spectrum, a linha única
oferece a possibilidade de se digilar no- O principal problema na utilização A vantagem é que se pode colocar,
me e idade separados apenas por uma do comando INPUT surge quando se dentro da variável, qualquer coisa até o
virgula, e de se pressionar o < ENTER > tenta entrar cordões alfanuméricos que < RETURN > incluindo virgulas e es-
,

somente no final. Pode-se ainda colocar contenham vírgulas e dois pontos, ou es- paços. Isto é mais garantido, pois você
qualquer número de variáveis —
sepa- paços em branco no início. Um endere- não precisará lembrar o usuário a digi-
radas por vírgulas em uma única linha ço, por exemplo, normalmente contém tar entre aspas.
de INPUT. vírgulas, de modo que fica impossível
Ao se utilizar apenas uma linha de usar o INPUT para colocá-lo em uma ACELERE AS ENTRADAS
INPUT para várias entradas, não se de- variável alfanumérica simples. Do mes-
ve esquecer de incluir instruções sobre mo modo, a inclusão de espaços no iní-
todas as informações pedidas, bem co- cio de uma entrada pode ser útil para a Uma das qualidades do comando LI-
mo os seus formatos. Além disso, é ne- beleza da apresentação na tela. NE INPUT consiste em permitir que vo-
cessário lembrar o usuário de que os da- A dificuldade está em que muitos com- cê altere o que estiver entrando, até o
dos devem ser separados uns dos outros putadores ignoram espaços à esquerda em momento de pressionar < RETURN >
por virgulas, e que só no final se
"

um comando INPUT, embora não criem ou < ENTER> Assim, se você come-
.

problemas com os intervalos entre as pa- ter um erro de digitação, ou perceber


lavras. E, quase sempre, eles também ig- que está fornecendo uma informação er-
noram qualquer coisa que ocorra após vir- rada, ou simplesmente mudar de ideia,
gula, dois pontos ou ponto e vírgula, trun- você poderá apagar o que foi feito e ten-
cando a informação reslante, mesmo que tar novamente. A desvantagem é que es-
o usuário a tenha digitado. Felizmente, al- se sistema é relativamente lento e, se vo-
cê estiver escrevendo programas para
pessoas pouco familiarizadas com com-
putadores, elas poderão não perceber ou
esquecer que < ENTER > ou < RE-
TURN > devem ser digitados.
> 1

RAMACAO BASIC

Em programas que utilizam uma por-


ção de menus ou respostas do tipo "sim
ou não", a necessidade de pressionar
uma leda extra diminui a velocidade de
execução, além de praticamente dupli-
car o número de teclas a serem pressio-
nadas. Para evitar que isto aconteça,
existe uma maneira de levar o compu-
tador a detectar automaticamente a te-
cla que está sendo pressionada, sem que
seja necessário acionar depois as teclas
<ENTER> ou < RETURN
O comando utilizado é o INKEYS Ima linha pude ser movimentada em diversa Com um programa simples, que controla
nos computadores Sinclair, TRS-80, direçues. Para isso, basia aeionar apenas algumas ledas, é possivel
TRS-Color e MSX, e o GET nos da li- algumas teclas indicadas pelo programa. desenhar imagens como as da ilustração.
nha Apple II.
O efeito da função INKEYS, que já es-
tudamos anteriormente, é provocar uma U no TRS-Color são utilizadas as te-
e 80 IFAS-CHRS (28ITHENX-X1+4
varredura no teclado para averiguar se al- clas,Z, X, P e L; no MSX, as teclas a 90 IFAS-"l"THENCOLOR 4.4
guma tecla está sendo pressionada nesse empregar são as de controle do cursor. 100 IFAS-"2"THENCOLOR 15,4
110 IFAS=CHRS(32)THENSTOP
instante. Se este for o caso, a função ira- Você também pode usar a tecla 2 para
120 LINE (X Y) - (XI. Yl)
pedir um desenho na cor de fundo da
,

rá o caractere correspondente de volta ao


130 GOTO30
programa principal. No caso de nenhu- tela (criando, portanto, uma linha invi-
ma tecla estar sendo pressionada no mo-
mento em que o INKEYS è encontrado,
ou a tecla 1, para retomar
sível),
nha do desenho visível.
à li-
HM]
um cordão vazio é trazido de volta. As-
sim o INKEYS é usado dentro de um co-
mando 1F, que testa
valor retornado t diferente
continuamente se o
do vazio:
D
10 PMODE 1 PCLS SCREEN
, : : 1 ,
10
20
ONERR GOTO 150
HGR :HCOLOR- 7
30 X - 100 :Y - 100
40 XI - X:Y1 - Y
20 LET X 00 LET Y-100 50 GET AS

QQE
:

40 LET XI- X LET Yl-Y :


60 IF AS - "P" THEN
50 LET AS- INKEYS
60 IF AS- P" THEN LET Y-Yl-4
70 IF AS"" L" THEN LET Y-Yl+4
80 IF AS"" Z" THEN LET X-Xl-4
Já nos micros da linha Apple II, o 90 IF A$-":X- THEN LET X-Xl+4
100 IF AS- 1" THEN COLOR 5
GET faz o computador esperar até que
110 IF AS- 2" THEN COLOR 0
a tecla seja pressionada, não sendo ne- 120 IF AS- " THEN STOP
cessário colocá-lo dentro de um laço de 130 LINE (X Y)-(Xl.Yl) ,PSET
espera, como nos outros casos: 140 GOTO 4

100 GET AS 10 INK 2


20 PLOT 127, B7
Qualquer variável alfanumérica po- 30 IF INKEYS-"P" THEN DRAM 0
de ser usada —
AS é apenas um exem- . 2

plo. A máquina pára na linha 100. Se 40 IF INKEYS-"1" THEN DRAW 0


,-2
você teclar o R, o AS conterá a letra R. -
50 IF INKEYS- "z" THEN DRAW
Você pode entrar um número, ou um es-
2,0
paço, ou qualquer outro caractere, até 60 IF INKEYS-"*" THEN DRAW 2
mesmo de controle como <EN-
teclas .0
TER> . Embora
seja virtualmente qual- 70 IF INKEYS - " THEN 1
" INK 2
quer coisa, a entrada pode ter apenas 80 IF INKEYS-"2" THEN INK 7
um caractere. Assim que a tecla for pres- 90 IF INKEYS-" " THEN STOP
sionada, o programa prosseguirá. 100 PAUSE 10
110 GOTO 30

Agora examine o seguinte programa, 10 SCREEN2


que utiliza quatro teclas para desenhar
20 LETX-100:LETY-100
30 LETX1-X LETY1
:

em alta resolução na tela (esse progra-

ff
40 AS" INKEYS
ma não funciona no ZX-81 e no 50 IFAS-CHRS (301THENY-Y1-4
I TRS-80, que não dispõem de alta reso- 60 IFAS-CHRS 31 THENY-Y 1 + 4
( )

| lução gráfica). Para desenhar no Apple 70 IFAS-CHRS (29) THENX-X1-4


IIIIIIIIIIHHH lllllllll
150 IFA$-"8"THENGOSUB8000
160 IFAS- n 9"THENGOSUB9000
170 GOT05

Altere a linha 70 do programa ante-


rior para:

ai
Um barco, um míssil, uma garrafa: ICC as diagonais eomo se
SCED
quiser executar desenhos turno ess ada de minúsculos degra
as instruções desenvolvidas no lexl o pressione duas ledas ao Modifique as linhas do programa an-
:rior para:

80 IF AS - "Z" THEN X - XI - 2 Os comandos INKEY$ ou são CET


também muito úteis em qualquer pro-
90 IF AS - "X" THEN X - XI + 2 grama que empregue menus. progra- O
"1
ma seguinte imprime um menu como
100 IF AS - '
THEN HCOLOR- parte de um programa de arquivo de
7 Apague as linhas !0 e 70 do progra-
"2 dados.
110 IF AS -
1

THEN HCOLOR- ma anterior, substituindo-as por:


0
120 IF AS - " " THEN END
130 HPLOT X.Y TO XI VI ,
10 DATA "Cri
140 GOTO 40 5 CLS
150 X - XI :Y - Yl: PRINT CHRS 10 DATA CRIAR UM ARQUIVO ENTRAR .

(7) ; : RESUME DADOS VER DADOS, EDITAR. PROCUR


, "Proi
AR, IMPRIMIR CARREGAR GRAVAR FIM
, . , "Carrega
Esse tipo de rotina é muito para
útil
15 RESTORE "Saidj"
gráficos e jogos. A linha é traçada en- 20 FOHN-1T09 15 RESTORE
quanto as teclas são pressionadas. Mas 30 READ OPCOESS 20 FOR n-1 TO 9
observe que o computador aceita uma 40 PRINTTAB (5) ;N;TAB (10) OPCOES ; 30 READ hS
tecla de cada vez; já as linhas diagonais 40 PRINT TAB 5 ; n TAB
; 1 0 ;

são de traçado mais difícil, pois consis- 50 NEXT n


tem em uma série de pequenos degraus. 60 PRINT PRINT TAB 5;"S
:

acolha->"
70 AS-INKEYS:IFAS-""THEN70 70 L.ET AS-1NKEYS: IF A$-
80 IFA3-"1"THENGOSUB1000 THEN GOTO 70
90 IFAS-"2"THENGOSUB2000 80 IF A$-"l" THEN
100 IFAS-"3 M THENGOSUB3000 90 IF AS-"2" THEN
110 IFAS-"4"THENGOSUB4000 100 IF AS- .

120 IFAS-"5"THENCOSUB5000 110 IF AS-"'


130 IFAS-''6"THENGOSUB6000 120 IF AS-"!
140 IFAS" " 7"THENGOSUB7000 130 IF AS-"<
140 IF AS-")
150 IF AS-"Í
160 IF AS-"<
170 GOTO 15
IIIIIIIIIIHHH lllllllll
Com esse programa, o computador ver sido teclado o primeiro dígito. Mas
vai direto á sub-rotina perlinenie assim existe uma maneira de entrar palavras
que uma lecla é acionada — a menos inteiras. E como não ê mostrado nada 10 LET pS-""
que você pressione uma outra tecla en- na tela, ela é ideal para se entrar uma 20 PRINT "DIGITE A SENHA"
tre os números de a 9. Neste caso, a
1 senha ou um "código secreto", que po- 30 PAUSE 0
linha 170 imprimirá novamente o menu de ser usado para limitar o acesso dos 40 LET kS-INKEYS: IF kS-""
e este se repetirá na tela. usuários a um determinado programa.
THEN GOTO 40
50 LET pS-pS+kS
Cada digito é entrado utilizando-se o
60 IF LEN pS<>7 THEN GOTO 3
UMA ROTINA PARA SENHAS INKEYS ou o GET, sendo o caractere 70 IF pSO"bananaa" THEN
resultante acrescentado ao último digi- STOP
to entrado. Eis o programa: 80 PEINT "O.K."
O programa anterior funcionará per- 90 REM (Em seguida vem o rea
feitamente enquanto existirem menos de fi~ÍBBF>''^J o do programa"
nove opções. Mas se você tentar teclar
10, o computador entenderá que você
está entrando o 1pois o programa pros-
,
10 PRINT "DIGITE A SENHA"
20 LET K$-INKEYS:IF KS"" " THEN HEI
seguirá automaticamente assim que ti- GOTO 20
30 LET PS-PS+KS Modifique a linha 20 do programa
40 IF LEN(PS><>7 THEN GOTO 20 para:
50 IF PSO" BANANAS" THEN STOP
60 PRINT "O.K." 20 GET KS:IF KS=" "THEN 20
70 REM (A SEGUIR VEM 0 PROGRAMA
Essa rotina começa com um cordão
vazio (PS), ao qual vão sendo progres-
sivamenie acresceniados os caracteres,
um a um, até que a extensão da senha
esteja correia. Como os caracteres en-
trados não são impressos na tela, o pro-
grama impede que as pessoas olhem o
que está na tela e aprendam a senha.
IIIIIIIIIIHMH llllllllll
O INKEYS (e outros comandos simi- 130 LET KS-CHBSÍK-128) é necessário "imitar" a ação do
lares) é igualmente empregado para 140 POKE -16368,0 INKEVS através de uma rotina diferente
"congelar" um programa. Isto é útil 150 RETURN da que foi apresentada para os micros
quando uma tela repleta de informações Esta sub-roiina, quando chamada da linha Apple II.
deve ser examinada. Após a parte do (por meio de um GOSUB 100), retorna- A locação 39 da memória RAM do
programa que imprime a informação, rá, atravésda variável K$, o caractere TK-2000 retém um valor numérico cor-
coloca-se um comando INKEVS ou pressionado no teclado. Se K$ retornar respondente à última tecla pressionada.
GET no programa de modo a bloquear tom valor nulo, isso significa que ne- Assim, a sub-rotina abaixo retorna esse
a listagem antes de limpar a tela. nhuma tecla foi pressionada. Por isso, código toda vez que uma tecla for pres-
podemos colocar a chamada à sub- sionada:
rotina em um laço, assim:
COMPUTADORES QUE NÃO TEM 0 INKEVS 100 LET K-0
110 LET K-PEEK (.39)
120 IF K-4B THEN GOTO 100
130 RETURN
Infelizmente, o interpretador Apple-
O comando PEEK examina a locação
soft BASIC, dos micros da linha Apple
de memória -16384, que guarda um có- A locação de memória 39. no TK-2000,
digo numérico. Se esse número for igual contém sempre o número 48. enquanto
II, não dispõe de uma função Ião pode-
a 128 ou maior, significa que uma tecla nenhuma tecla for pressionada.
rosa como o INKEVS, para efetuar
foi pressionada e que o seu código AS- Assim, é fácil incluir uma chamada
"varreduras" no teclado. Existe apenas
CII será deduzido pela expressão' da li- a essa rotina (GOSUB 100) no ponto do
o comando GETS, mas este bloqueia o
nha 130 e convertido para o caractere ar- programa em que se torna necessário ve-
andamento do programa toda VC2 que
é encontrado por ele. Dessa forma, se
mazenado em KS. O comando POKE alguma
rificar se tecla foi pressionada
zera uma outra locação da memória, pa- e, emcaso positivo, qual foi essa tecla.
quisermos, por exemplo, fazer progra-
ra permitir uma nova varredura. Para descobrir o código gerado por
mas de jogos em que um míssil ou um cada tecla do TK-2000, rode o pequeno
disco voador precisa continuar se mo-
programa abaixo c pressione sucessiva-
vendo pela tela enquanto o jogador não
mente as teclas que quer descobrir. O
pressiona a tecla que comanda um dis-
código correspondente será mostrado na
paro, é necessário "imitar" a ação do O interpretador BASIC do TK-2000 tela. Pressione <CTRL><C> para
INKEVS, executando o pequeno pro- não dispõe de uma função ião podero-
interromper o programa:
grama a seguir (não tente entendê-lo ain- sa como o INKEYS para efetuar "var-
da: estudaremos os comandos PEEK e reduras" no teclado. Existe apenas o co-
mando GET (de funcionamento idênti- 10 HOME
POKE numa lição posterior):
20 LET K-PEEK(39)
co ao do Apple II), que tem a desvanta-
30 IF K<>48 THEN PRINT K
100 LET KS-" gem de bloquear o andamento do pro- 40 GOTO 20
110 LET K-PEEK (-16384) grama, sempre que é encontrado por cie.
120 IF K<128 THEN RE TU RN Assim, para programarmos jogos em O uso do PEEK tem uma vantagem
que um missil ou um disco voador, por a mais: se você apoiar o dedo sobre uma
exemplo, precisa continuar se movendo determinada tecla, o código referente a
pela tela enquanto o jogadoi ela será mostrado repetidamente na te-
siona a tecla que comanda um disparo. ia, ou seja, a função é auto-repetiiiva.
Isto é muito importante para diversos ti-
pos de programas, principalmente pro-
gramas de jogos.
IIIIIIIIIIIHI * PROGRAMACAODCJOGOS 8 ||||||||||
Bipes, explosões, ruídos extraterrenos:

seja qual for a sus escolha,


todos esses sons podem ser produzidos
por programas simples em BASIC,
tornando seus jogos mais eletrlzantes.

Os programas de jogos de açào in- A incorporação de efeitos s> das linhas TRS-Color e MSX possuem
cluem, normalmente, diversos tipos de seus programas depende da complexida- um gerador de sons bastante sofistica-
efeitos sonoros — explosões, tiros, zum- de destes e da frequência com que tais do, capaz de sintetizar uma série imen-
bidos, pequenas melodias e outros ruí- efeitos serão utilizados. Assim, ruídos sa de efeitos diferentes. Esse gerador dis-
dos — que os tornam mais excitantes e simples que entram apenas uma vez em põe de vários comandos específicos na
atraentes. um programa, devem ser colocados após linguagem BASIC. O Apple II, 0ZX-8I
Esta lição tem por finalidade propor- uma declaração 1F... THEN. Efeitos re- e o TRS-80 só permitem efeitos sonoros
cionar a você uma pequena "bibliote- petitivos ou mais complexos, por sua satisfatórios através de programas espe-
ca" de sons adequados a programas de vez, precisam de uma sub-rotína. ciais em linguagem de máquina; por is-
jogos. Você pode utilizá-los tal como es- O grau de sofisticação dos efeitos so- so não serão tratados nesta lição.
tão ou desenvolvê-los livremente, como noros depende não só da habilidade do
pane de conjuntos sonoros mais com- programador, mas também dos recur- SE]
plexos. sos de programação de sons de cada
Lembre- se de que não existem regras computador. Desse modo, o gerador de O Sinclair Spectrum conta, como já foi
sumárias ou definitivas para se produ- som dos micros compatíveis com o Sin- assinalado, com um único recurso para
zir efeitos sonoros. Se o seu jogo preci- clair Spectrum (por exemplo, o TK-90X) a programação de efeitos sonoros em BA-
sa, por exemplo, de um ruído semelhan- é limitado a um simples tom puro (cha- SIC: o comando BEEP. Simples de pro-
te ao de alguém mergulhando numa pis- mado de hipe, em jargão computacio- gramar, esse comando pode ser usado pa-
cina, você terá que sentar-se em frente nal) obtido por meio do comando ra "envenenar" consideravelmente os seus
ao computador e experimentar várias BEEP, e cuja frequência e duração po- programas. No TK-2000 temos um co-
vezes, até conseguir um efeito convin- dem ser controlados pelo usuário. Um mando equivalente: o SOUND. Para
cente. Por outro lado, alguns sons apa- ruído semelhante pode ser produzido, exemplificar, veja a seguir uma rotina que
rentemente improváveis poderão ser no microcomputador brasileiro produzirá uma série de sons idênticos:
bem aproveitados, caso você consiga in- TK-2000. mediante o comando
ventar os tipos adequados de gráficos. SOUND. Em contrapartida, os micros
IIIIIIIIIIIHI * PHOCRAMAÇÃODUOGOS 8 111111111!

INVENTE 0 SOM CERTO E SOUND


COMO INCORPORAR EFEITOS EXPLOSÕES, TIROS.
SONOROS AO JOGO DE DESTRUIÇÃO
LABIRINTOS ALEATÓRIOS DO RUIDO AS NOTAS MUSICAIS
APRENOA A USAR BEEP, PLAY MAIS EXPLOSÕES

8000 FOH n-1 TO 12 tas. Isto resulta em um efeito q*ie pode-


8010 BEEP .03,30 E3 rá lhe ser útil quando, em um de seus
8020 NEXT n 8000 FOR N-1 TO 12 jogos, for necessário criar um som pa-
8010 SOUND 90, ra acompanhar a destruição de um ex-
Como você pode ver na linha 8010 do 8020 NEXT N traterrestre.
programa acima, o BEEP é seguido por
doisnúmeros separados por uma virgu- O comando SOUND no TK-2000 (ve-
la.O primeiro número determina a du- da mesma ma-
ja a linha 8010) funciona
ração da nota a ser tocada: quanto que agora o primeiro número
neira, só 8000 FOR n-4 TO 0 STEP -1
maior ele for, mais tempo durará a no- determina a frequência do som, e o se- 8010 BEEP .01,
la.O valor 1 corresponde à duração de gundo a sua duração. Não são permiti- 8020 NEXT n
um segundo. Números maiores ou me- dos números negativos ou fracionários, 8030 FOR n-1 TO 4
nores do que esse (no caso, f rações de- nem maiores que 255. A correspondên- 8040 SOUND ,01,n
8050 NEXT n
cimais) funcionarão proporcionalmente. cia da frequência com as notas musicais
O
segundo número estabelece a fre-
quência da nota, com o número 0 cor-
respondendo ao dó médio no teclado de
é um pouco mais complicada, c está ilus-
trada no manual de programação BA-
SIC do TK-2000.
m
8000 FOR N-60 TO 0 STEP -10
um piano. Cada número inteiro acima Os comandos BEEP e SOUND serão 8010 SOUND U. 3
ou abaixo disso representa um semitom explicadoscom maior riqueza de deta- 8020 NEXT N
mais alto ou mais baixo — ou seja, é lhesnuma próxima lição. 8030 FOR N-0 TO 60 STEP 10
correspondente á tecla mais próxima, Na rotina acima, o laço FOR... 8040 SOUND N.
em um teclado de piano. Para efeitos so- NEXT executa uma série de doze notas. 8050 NEXT N
noros em jogos, frequências muito bai- Já o programa abaixo contém dois la-
xas, da ordem de -32, são utilizadas ços, com a variável de controle de cada Eis aqui uma rotina que emprega o
para imitar explosões e zumbidos. laço estabelecendo a frequência das no- laço FOR. ..NEXT de um modo pareci-
3 n -

Illllllll» B PtOGBAMACÂODÍJOGOS 8 1H|||||||||||


do; o ruído criado, porém, será agora utilizá-los também nos registros. Os valores adequados são
um som de "Congratulações". Você po- sub-rotinas. colocados nesses registros por. intermé-
derá utilizá-lo quando o jogador tiver dio do comando SOUND R, N (R é o
destruído todos os "monstros" ou pa-
SONS PARA 0 LABIRINTO número do registro, e N o número que
ra celebrar alguma outra vitória. determinará as características do som).
O MSX conta ainda com uma lingua-
Imagine o jogo de labirinto aleatório gem "macromusical" disponível me-
apresentado na última lição com alguns diante o comando PLAV. Quando se
8000 FOH n-10 TO 60 STEP 5 efeitos sonoros.Note que não há uma deseja programar uma melodia (è neces-
8010 BEEP .01. versão para o TK-2000. Adicione as li- sário entender um pouco de música) é
8015 BEEP -01,n-2 nhas 365 e 500 ao programa original c mais fácil utilizar esse comando e não
8020 NEXT n modifique a linha 400. se preocupar com tantos registros. O
PLAY c, contudo, um pouco lento e
El não produz ruídos, só notas musicais.
365 BEEP .01.10 Para eniendè-lo melhor, leia a seção de-
8000 FOR N-70 TO ISO STEP 5
400 LET vidaa-vidaa-l: RESTORE dicada ao TRS-Color, mais adiante.
8010 SOUND N. 500: FOR f-0 TO 10: READ a,b:
8015 SOUND N-2,3 BEEP a,b: NEXT f: IF vida9>0
8020 NEXT N THEN GOTO 260 JOGO SONORO NUM LABIRINTO
Tente fazer experiências mudando os 500 DATA .45, 0. .3,0. 15.0. .45. .

parâmetros do comando BEEP (ou 0, . 3, 3. . 15.2, . 3.2. . 15.0, .3, 0. .

15.-1, .45,0 Se você gravou o programa de cria-


SOUND) para produzir efeitos sonoros ção de labirintos aleatórios para o MSX
em seus programas de jogos. Procure Se você rodar o programa agora, des- (apresentado na última lição de progra-
cobrirá que acrescentou uma rotina de mação de jogos), certamente achará in-
som simples mas muito eficaz, que exe- teressante acrescentar as três linhas que
cuta uma marcha fúnebre sempre que o listamos a seguir.
jogador perder uma "vida". Tente mo-
1 330 IF XOLX OR YOLY THEN LX-
dificar os valores de a e b para criar efei-
X LY-Y PLAY " V 1 5T2550SL64DG"
: :

tos diferentes.
1340 IF F-l THEN F-0 SC-5C+ (TI:

Esse exemplo mostra que você deve TIME) :TI=TI~10: PLAY "V15T100O3B
sercuidadoso quando utilizar efeitos so- CDEFGA" GOTO 1220 :

noros em jogos, já que o computador 1500 PLAY n V15T25502L2Cri64L4CR6


EFEITOS SONOROS NO TRS-80 interrompe o que está fazendo durante 4L12CR64L2CR64L4DIR64L8DR64L4DR
O TRS-80 não tem recursos para a pro- a execução do BEEP, criando assim al- 64L8CR64L4CR6401L8BR6402L2C" LI :

dução de efeitos sonoros, mas é pos- -LI-1


sível fazê-lo emitir alguns sons. Para is-
gumas pausas inoportunas. Mesmo que
to, utiliza-se a interface de saída para
você inclua apenas efeitos de curta du- A primeira linha produz som para o
o gravador cassete, que gera pulsos no ração, isso poderá tornar o seu jogo movimento do homenzinho; a segunda,
espectro audível, sob controle adequa- muito lento. para o momento em que ele encontra o
do de um software. Basta ligar o fio que tesouro; a terceira toca uma "marcha
vai do computador até o conector MIC fúnebre" quando ele perde uma "vida".
ou AUX, em um sistema de amplifica- Como dissemos, o comando PLAY
ção de som, O MSXpossui um dispositivo sono- só é adequado para programação de me-
O software òe produção de som ro muito sofisticado que emprega três lodias. Quando desejarmos ruídos (sons
funciona da seguinte maneira: o co-
mando OUT envia para a porta de saí- "vozes" altamente controláveis, ou ca-
da do gravador (a de número 255) uma nais sonoros. Esse dispositivo permite
sequência de bytes 0 e 1 O byte 0 cau-
.
uma grande variedade de ruídos, mui-
sa um pulso negativo na saída, e o byte tos dos quais podem ser incorporados
1, um pulso positivo. Alternando-se aos seus programas de jogos.
ambos, temos uma onda de som. Para Tais ruídos podem ser criados por
variar a frequência do som, varia-se a meio das "vozes", isoladamente ou em
pausa entre o pulso positivo e o nega- grupos, de modo a formar diversas com-
tivo. Com essa técnica, é possível pro-
binações. Uma explicação mais detalha-
duzir sons em BASIC: basta colocar os
comandos OUT dentro dos laços de re- da sobre programação de efeitos sono-
petição entre meados de um laço de re- ros no MSX
será desenvolvida em um
tardo de tempo: artigo posterior de BASIC.

10 FOH 1=1 TO 1000


O MSX utiliza um segundo micro-
processador interno somente para pro-
20 OUT 255.0
duzir sons e efeitos sofisticados: algu-
30 FOH J-l TO 10:NEXT J
40 OUT 255,1 mas linhas de programa são suficientes
50 NEXT I para isso. Esse microprocessador é com-
posto por 14 registros que funcionam de
Sons mais agudos e como
efeitos
explosões, sirenas, etc, exigem uma maneira semelhante às posições de me-
rotinaem linguagem de máquina, que mória do computador. O som é produ-
pode ser chamada 3 partir de um pro- zido de acordo com o conteúdo de tais
grama em BASIC pelo comando USR.
1 W

* PHOGHAMAÇÁODtJOGOS 8 111111111
IIIIIIIIIIIHI
não musicais) ou uma velocidade maior, JO FOR 1-10 TO L5 STEP 1E-HJ 95 SOUND A. Z: NEXT: RETURN
deveremos utilizar o comando SOUND. 40 SOUND 8.1 100 SOUND 1.0:F0R Z-l TO 20 STE
*>0 NEXT P .1
Muitos valores (até 13) devem ser co-
60 FOR 1=15 TO 10 STEP -IE'03 105 SOUND A, ABS (SlN (Z) *T/2)
locados nos registros adequados, para 107 NEXT RETURN
70 SOUND 8 , :

a emissão de um determinado som. Co- 80 NEXT 110 SOUND 1.1:F0R Z-l TO 200
mece a aprender como fazè-lo, digitan- 90 GOTO 30 115 SOUND A RND (1 * (T+l) NEXT
.
)
:

do as seguintes linhas: 117 RETURN


Modifique o valor do STEP nas li- 120 IF A-0 THEN A-1:T-1S
10 SOUND 7.7 122 FOR Z-l TO 50
20 SOUND 6. 20 nhas 30 e 60 de -1E-3 para .5 e você ou-
125 SOUND A.T AND ABS ÍTAN (Z) +5)
30 SOUND 8.15 virá o barulho de um trem a vapor em
127 NEXT RETURN
movimento. O programa listado a seguir
:

130 SOUND A,T/2:SOUND 1.2


Rode o programa e ouvirá um ruído permite que você experimente e modifi-
semelhante ao das ondas do mar que- que vários efeitos sonoros, variando os
brando na praia (use a imaginação). valores dos diversos registros. A linha 5 limpa a tela e prepara o ge-
Vejamos os registros utilizados. Na rador de números aleatórios. Os diver-
linha 10 colocamos o valor 7 no regis- 5 CLS:H-HND(-TIME) sos INPUT das linhas seguintes pedem
tro 7. Este último determina os canais 10 INPUT "Número do programa tl informações a respeito do efeito dese-
de som a serem utilizados e se eles pro- -13): ";P jado. Nas linhas 80 a 207 estão treze di-
duzirão música ou ruído. O que impor- 15 INPUT "Envoltdria (1-fixa , ferentes sub-rotinas que geram- treze
ta no momento é que o valor 7 ativa os 2-progr amável " E ) : ;
efeitos diversos.
16 EE-14+E
três canais para criar ruídos. O valor 56 Essas sub-rotinas cuidam principal-
ativaria os três para sons musicais.
20 IF E-l THEN 35
25 INPUT "Forma da onda sonora
mente da frequência dos sons —
isto ê,

Qualquer outro valor entre 1 e 63 utili- (8-15) ";W :


se eles são agudos ou graves —
e de co-
zaria os canais de uma maneira mista. 26 SOUND 13, mo essa frequência vai variar com o
Na realidade, deve-se converter o valor 30 INPUT "Período do ciclo (0-6 tempo. Caso se trate de som musical, é
utilizado para a forma binária de modo 5384): ";F utilizado o canal A, cuja frequência é es-
a ficarmos sabendo o que cada canal 31 Hi-F/256:LÍ-F-256*H* tabelecida pelos registros 0 (ajuste fino)
produzirá: música ou ruído. 32 SOUND 11,L»:S0UND 12, Ht e (ajuste grosseiro). Em caso de ruí-
1

35 INPUT "Muaica ou ruído (M ou do, a frequência ê determinada pelo re-


Na linha 20, o registro 6 determina a ":MS
frequência do ruído produzido, poden-
B) :

36 IF «S-"M- THEN SOUND 7 56 A- , :


gistro 6. A variável A
contém o valor
do conter valores dc 0 a 63 Números me- adequado do registro de frequência,
.
0:T-255:GOTO 40
nores determinam sons mais agudos. Na 38 IF MS-"H" THEN SOUND 7,7;A-6 conforme a opção seja música ou ruí-
linha 30, o registro 8 controla o volume :T-63:OOTO 40 do. A variável T varia também confor-
do som produzido pelo canal A, poden- 39 GOTO 35 me essa opção, compatibilizando os va-
do conter um número entre 0 e 15. Ge- 40 SOUND 8.EE lores máximos que cada registro de fre-
ralmente, é melhor colocarmos o valor 60 ON P GOSUB 80.90.100,110,120 quência comporta.
máximo e ajustarmos o volume da TV. .130,140.150.160.170,180.190.20 Conforme o valor do registro 7 (li-
0.210 nhas 36 e 38) teremos ruídos ou sons
Outras vezes, contudo, podemos criar
70 SOUND 8.0: END musicais. O valor 7 determina ruído, e
efeitos interessantes variando o volume.
80 SOUND 1,5: FOR Z-l TO T STEP
Acrescente as seguintes linhas ao progra- o valor 56, música (nos três canais).
. 3
ma para obter um som mais próximo do 85 SOUND A Z NEXT RETURN , : :
Uma das características do dispositi-
real. Lsto é conseguido variando lenta- 90 SOUND 1,0: FOR Z-T TO 1 STEP vo sonoro do MSX é a possibilidade de
mente o volume nas linhas 40 e 70. programar o formato da onda sonora
IIIIIIIIIIIHI « PROGtAMÇÃODUOGOS 8 |||||||||
ou "envoltória". Isto significa que o vo- PLAV. Ambos utilizam o mesmo gera- Quando se precisa de um tipo
lume do som muda ao longo do tempo dor sonoro, embora não seja possível sofisticado de efeito sonoro, é recomen
de acordo com uma curva cujo forma- afetar de maneira significativa a quali- dável abandonar o comando SOUND.
lo pode ser escolhido por nós (formato dade (timbre) da nota produzida. O cujos recursos são limitados. Ao invés de-
de serra, triângulo, pulso, etc). Normal- SOUND controla a frequência e a dura- le, é preferível utilizar o comando PLAV.
mente, o volume é fixado de acordo com ção do som, enquanto o PLAV permite como será explicado mais adiante.
o valor do registro 8 (para o canal A). que você selecione uma sequência de no-
Se colocarmos nesse registro o valor 16 tas musicais para executar uma melodia,
OUTRA VEZ UM LABIRINTO
(linha 40) leremos à nossa disposição di- por exemplo. O comando SOUND po-
versos tipos de envoltórias (veja o for- de ser utilizado para produzir bipes (sim-
mato delas em seu manual). O
registro ples tons sonoros, de frequência e dura- Se você gravou o programa de criação
'
13 seleciona a forma da envoltória, e os ção fixas), como mostramos no progra- de labirintos aleatórios para o TRS-Color
registros 1 1 e 12 determinam o período ma a seguir. Quando rodá-lo, não se es- (dado na última lição de programação de
do ciclo. Este último valor corresponde queça de ligaro volume na sua TV; do jogos), poderá melhorar muito o jogo,
ã velocidade com que o volume vai mu- contrário, não ouvirá nada! adicionando os efeitos sonoros a seguir.
dar. Valores baixos correspondem a al- Substiluaa linha 230 no programado
10 FOR Q-l TO 5
tas velocidades. labirinto pela seguinte:
20 SOUND 200,1
Comece então a experimentar. Esco- 30 NEXT Q
lhendo o programa 10, por exemplo, 230 IF XOLX OR YOLY THEN PUT
com envoltória Fixa e sons musicais, vo- A série de bipes pode ser alterada me- (XI, Yl) - (Xl+BS-1 .Yl+BS-l) ,B,PSE
cê ouvirá um canto de pássaro. As va- diante a modificação dos números após
T:LX-X:LY-Y.PLAY"T5005DC"
riações são quase ilimitadas. o comando SOUND. O primeiro núme- Mude a linha 240 para:
Para entender melhor como todos es- ro controla a frequência da nota e pode
240 IF F-l THEN F-0 SC-SC+ tTl-T
ter um valor de 1 a 255. A nota mais bai-
:
ses valores modificam as características
IHEPO :T1-T1-10:PLAY"T10G3BCDEFG
do som produzido, faça o seguinte: pri- xa é produzida por 1 e a mais alta por A-G0TO 130
meiro ouça todos os treze programas 255 (para alguém que conhece algo so-
utilizando envoltórias fixas e sons mu- bre música: o valor 89 corresponde à no- e substitua a linha 500 por:
sicais.Depois comece a ouvi-los com as ta dó da escala do meio de um piano).
500 CLS:SCRE£N 0 0 PLAY"T302L2C
diferentes envoltórias programáveis, O segundo número após o comando ,

L4CL12CL2CL4DIL6DL4DL8CL4C01L8B
:

mantendo o mesmo programa para po SOUND regula a duração do tom sono- 02L2C" LI-LI-1
:

der comparar, inicialmente, varie ape ro. Novamente, a gama possível de va-
nas a forma da onda, mantendo o va lores vai de I a 255; o valor 16 fornece Agora, rodeoprogramaeescuteoque
lor 1000 para o período do ciclo. A se cerca de um segundo de duração. acontece quando o homenzinho se move
guir, varie o período, conservando o Esses bipes podem ser adequados a pelo labirinto. Você obterá um som di-
to constante. Depois de experimentar os jogos especiais ou de fantasia, mas não ferente no momento em que o tesouro for
sons musicais, repita a mesma sequên- são de muita utilidade quando o tema encontrado, e uma "marcha fúnebre"
cia para os ruídos. do jogo é mais realista. Assim como no quando o jogador perder uma "vida".
caso dos efeitos gráficos simplificados Ao lidar com efeitos sonoros, procu-
para produzir explosões (flashes) descri- re evitar que eles retardem o seu jogo,
tos anteriormente, deve-se ser criterio- pois toda vez que produz um som o
Existem dois comandos no BASIC do so ao utilizá-los. Nunca deixe de empre- computador interrompe qualquer outra
TRS-Color que podem ser usados para gar efeitos sonoros adequados ao "cli- coisa que esteja fazendo. Em programa-
produzir efeitos sonoros: o SOUND e o ma" do jogo. ção de jogos, isso significa que qualquer .
IIIIIIIIIIIHH * PROGHAMAÇÃO DC JOGOS 8 lllllllli
movimento na leia cessa enquanto o parâmetros em um cordão, em qualquer tena o cordão, de modo que, quando a
som estiver sendo produzido. Na verda- ponto durante a melodia, tornando as- linha 30 o executa, o som se repete.
de, você pode sons em vez de la-
utilizar sim o comando PLAY muito flexível.
ços FOR...NEXT para introduzir pau- UMA SIRENE
sas mais ou menos longas nos seus pro- J
'

EXPLOSÕES
gramas. O som na linha 230, por exem-
plo, é muito curto, pois o espaço de tem- A repetição de um som lem outras
po foi reduzido ao mínimo. Trabalhan- O comando PLAY pode igualmente aplicações. Se você deseja obter o ruí-
do com sons, você pode até mesmo fa- para produzir efeitos sono-
ser utilizado do de uma sirene, empregue um progra-
zer o ajuste fino de seus programas. ros simulando explosões, que serão de ma como esse:
grande utilidade na maioria de seus jo- 10 CLEAR 250
gos de açào. Os seguintes efeitos sono- 20 FS""T150O4L8CDD#EF|FGF#FED|D
0 COMANDO PLAY ros podem ser utilizados sozinhos, ou C#CD#DC*C"
com as imagens da lição "Bombardeios 30 FS-F$+FS+F$+FS
Explosões" (páginas 121 a 127). 40 PLAY FS
O comando PLAY opera sempre e
com base em um cordão alfanumérico, Tente esse efeito: Para se obter o efeito de sirene,
que transporta instruções para o com- constrói-se um longo cordão, con-
10 PLAY"T1600U30GFIFEIDIDC#D#D catenando-se quatro partes do FS ori-
putador. O cordão na linha 230 do pro-
grama anterior contem as instruções
FE#" ginal, antes de executá-lo. O computa
TS0O5DG.OT significa Tempo(ou ve- Você poderá usá-lo quando algo for dor TRS-Color oferece, ao ser ligado,
locidade, se você preferir) e pode ser es- atingido ou explodir na tela. Incorpore- uma quantidade limitada de espaço pa-
tabelecido em qualquer valor de 1 a 255. o, por exemplo, ao programa da pági- ra variáveis alfanuméricas, de modo que
A letra Oé a oitava, e pode assumir um na 64, acrescentando o comando PLAY o cordão que contém o novo efeito so-
valor de a 5 (I é o valor mais baixo,
I à linha 270, antes do comando GOTO. noro será muito maior do que a memó-
e 5 é o mais alto). As duas últimas letras, Uminteressante som de reverberação ria disponível.

D e G, são notas, no sistema ameri- pode ser conseguido assim: Portanto, a linha 10 é usada para re-
cano de notação (C é dó, D é ré, E é mi, servar mais espaços para variáveis alfa-
De um modo muito geral, o que
etc). 10 PLAY"T80OlL2BFBFBFBFBFBFBFBF numéricas, por intermédio do comando
T50O5DG significa é: "toque duas no- BF" CLEAR 250, que estipula 250 bytes pa-
las altas rapidamente". ra esse fim. Tenha cuidado em reservar
Tente alterar os valores de T e pa- O Na oitava mais baixa, duas notas se os 250 bytes extras de memória quando
repetem sem cessar. Tente manipular a você utilizar o efeito sonoro em um pro-
ra ver que tipos de efeitos sonoros você
velocidade e a duração das notas para grama de jogos; caso contrário, você ob-
poderá obter.
Na linha 240, o cordão é T10O3BCD obter variações sobre esse som. terá uma mensagem de erro: OS — oul
Você poderá conseguir uma repetição of slring space.
EFGA, que executa uma escala cres-
de seus efeitos sonoros utilizando uma Não fique desapontado se os seus ex-
cente.
rotina como a que se segue: perimentos não produzirem sons com-
A marcha fúnebre na linha 500 é mais
complexa. Uma explicação detalhada de paráveis aos melhores efeitos em jogos
10 FS-"T100O2LlOAGBE»DFADF|"
como escrever música para o computa- comerciais. Alguns efeitos muito bons
20 F5-FS+FS
dor deverá esperar mais um pouco, mas são possíveis em BASIC, mas os mais
30 PLAY FS
observe o quanto a duração da nota L sofisticados são escritos em código de
é variada durante a melodia. Na verda- A linha 10 contém o cordão de ins- máquina —um tópico que será aborda-
de, você pode variar qualquer um dos truções para o som. A linha 20 conca- do futuramente em INPUT.
Dividida em RAM e ROM, a memória
do computador armazena dados,
resultados e programas. Quase tão
complexa quanto a memória humana, dela

depende o funcionamento da máquina.

A
memória dos micros é constituída Assim, se quisermos identificar 64K de
por milhares de minúsculos circuitos in- memória, devemos numerá-los de a 1

tegrados de silício que podem ser ligados 65 536 em decimal (ou, de 0000 a FFFF,
e desligados individualmente. Esses cir- em hexa). Além da organização básica em bits
cuitos são organizados, dentro do chip, O número hexadecimal de quatro dí- e bytes, o espaço de memória do com-
em grupos de oito. Cada grupo represen- uma locação de memó-
gitos atribuído a putador é dividido em subunidades: as
ta um byte, isto é, um número binário de ria é conhecido como o seu endereço. páginas, definidas como conjuntos en-
ou o correspondente a dois dí-
oito bits, Os micros aqui citados podem atin- dereçáveis de 100 locações de memória
gitos em
hexadecimal. Internamente, tal gir uma memória interna de 64K, pois em hexa, cada uma (256 em decimal).
número é usado para definir um endere- contam com um espaço de endereça- A
página 0 (zero) vai de 0000 a 00FF;
ço para cada locação de memória. mento de dezesseis biis. Entretanto, não a página i (um), de 0100 a 0IFF, e as-
é esta a quantidade habitual de memó- sim por diante. A organização em pági-
ria anunciada pelos fabricantes. O mo- nas facilita a programação do sistema,
0 ESPAÇO OE MEMORIA delo mais comum do Spectrum (por pois páginas específicas podem ser re-
exemplo, o TK-90X, no Brasil) tem 48K; conhecidas pelo hardware da UCP.
o TRS-Color, 32K; e o Apple II e o Existem dois tipos de memória inter-
Em computação, um K é aproxima- TRS-80, 48K cada um, De fato, porém, na: ROM e RAM. ROM {Read-Onlu
damente análogo ao k (quilo) do siste- todos eles têm 64K de espaço de memó- Memory) memória somente de
significa
ma métrico. Na realidade, 1K em com- ria, ao todo. Esse número refere-se ape- leitura. Ou o conteúdo
seja, pode-se ler
putaçãa equivale ao número hexadeci- nas à quantidade de memória que o das locações de memória ROM mas não
* mal 40©, que é igual a 024 em decimal.
1 usuário ou o programador podem utili- se pode escrever nelas. Protegida con-
zar: os outros 32 ou 16K, conforme o tra alterações externas, a informação
caso, são reservados para utilização pe- contida é fixada permanentemente
la própria máquina. Nos micros citados, quando os chips ROM são produzidos.
os fabricantes numeram as locações de A memória ROM guarda as instru-
memória de 0000 a FFFF. O
Spectrum ções operacionais e o interpretador que
ou o ZX-81 de I6K (os menores) que— traduz seus programas BASIC para có-
têm na realidade 32K de memória ao to- digo de máquina. Os códigos contidos
do —
numeram suas locações de memó- na ROM(ambém são responsáveis pela
ria de 0000 a 7FFF. imposição de uma estrutura ao resto da
memória. Aberta ao usuário, a RAM
(Random Access Memory) significa me-
mória de acesso aleatório. Algumas lo-
cações na RAM
são controladas pela
ROM: se você tentar escrever nessas lo-
cações reservadas de memória, os pro- trário, o apontador CHANS, cujo en-
gramas gravados na ROM
se encarrega- dereço é armazenado nas locações
rão de fazè-las voltar ao seu conteúdo A memória ROM de 16K do Spec- 23 631 e 23 632 (5C4F e 5C50, em he-
original. Apesar disso, RAM é uma es- trum vai de 0000 a FFFF e contém o in- xadecimal), é deslocado para 5BC6.
pécie de folha em branco, na qual você terpretador e o editor de programas em A área de informação de canal trans-
pode escrever o que quiser. BASIC, bem como várias rotinas de en- porta os dados de entrada e de saída. Ela
trada e de saída e o conjunto de carac- conduz a entrada do teclado para a pane
teres que guardam os dados para as le- mais baixa da tela de TV e a saída do
PONTEIROS E INDICADORES
tras do alfabeto, números e outros sím- programa para o restante da tela, para
bolos gráficos. Os 48K restantes — que o espaço de trabalho mais acima na me-
Os mapas de memória mostrados vão de 4000 a FFFF — ou os I6K res- mória e para uma impressora.
adiante sào uma representação gráfica tantes — que vão de 4000 a FFFF — A área do programa BASIC retém as
da memória RAM e ROM de cada tipo são memoria RAM. linhas de qualquer programa BASIC di-
de micro. As áreas representadas, con- As funções das áreas em que a memó- gitado ou carregado; seu tamanho de-
tudo, não estão em sua posição física riaRAM está dividida são as seguintes: pende da extensão do programa. Inicia-
exala, pois o espaço da memória é divi- A área de exibição controla o que é se no endereço fornecido pela variável
dido em diferentes chips. Alguns dos li- mostrado no vídeo. Cada locação da de sistema PROG, que é armazenada
mites entre as seções da memória co- — memória corresponde a uma linha de oi- nas locações 23 635 e 23 636 (5C53 e
mo a fronteira entre a ROM e a RAM to píxels. 5C84) na área das variáveis do sistema.
— coincidem com a mudança de um A área de atributos controla as cores Isto apontará para a locação 23 755
chip para outro. Outros, porém, são fle- de fundo (PAPER) e de frente (INK) (5CCB em hexa), se nenhum microdri-
xíveis e suas posições são indicadas por das 768 locações de caracteres na tela, ve estiver conectado.
um ponteiro ou indicador na área de va- e o tipo de exibição a ser feita (intensi- A área das variáveis armazena os
riáveis do sistema. dade normal, brilhante ou piscante). valores das variáveis que estão sendo
Um ponteiro é uma locação da me- A memória intermediária da impres- utilizadas no programa BASIC em cur-
mória (ou melhor, um par de locações sora retém a próxima linha do texto que so.Começa na locação apontada por
da memória) que armazena o endereço será enviada para a impressora. VARS, armazenado nas locações 23 627
de uma outra locação —
neste caso, o A área de variáveis do sistema con- e 23 628 (5C4B e 5C4C em hexa) da área
início de uma seção particular da memó- tém as locações que guardam os ende- das variáveis do sistema. Quando um
ria. O endereço de qualquer byte dc me- reços do início das áreas especificadas programa é rodado, o início da área das
mória é constituído por um número bi- acima (apontadores). variáveis permanece onde está, mas o fi-
nário de dois bytes de comprimento (de- A área de mapeamenio de microdri- na! vai crescendo para cima, à medida
zesseis bits), de modo que precisa ser ar- ves existe apenas nas unidades de micro- que novas variáveis são definidas pelo
mazenado em duas locações adjacentes fita (microdrives) para o Spectrum. co- programa em BASIC.
de memória. nectadas ao computador. Em caso con- A área de edição è o local onde é fei-
Illlllllll CÓDIGO DE MAQUIt IIIIIIIM

ta a edição das linhas BASIC. Quando tanto, o topo da RAM é armazenado em


MAPA DE MEMÓRIA o < ENTER > é apertado, as linhas são uma variável do sistema e pode ser deslo-
DO SINCLAIR SPECTRUM copiadas para a área do programa BA- cado para uma posição mais abaixo na
SIC. A área de edição começa na E- memória, usando-se o espaço de reserva
LINE, cujo endereço é retido nas loca- para as pilhas de sub-rotina e de máqui-
ções 23 641 e 23 642 (5C59 e 5C5A em na. Isto pode ser feito através de progra-
hexa) na área das variáveis do sistema. mação em código de máquina. Normal-
O espaço de trabalho serve para ta- mente, um programa em código de má-
refas gerais, como a armazenagem dos quina fica acima do RAMTOP abaixada
dados de entrada e a concatenaçào de O apontador P-RAMT assinala o to-
strings. O WORKSP é armazenado em po físico da memória RAM; isto é, aci-
ae " n 00 ~° ' SStop 23 649 e 23 650 (5C61 e 5C62 em hexa) ma desse ponto não existem mais locações
da memória nos chips do Spectnim. O P-
'

'
na área das variáveis do sistema.
A
pilha de cálculo è utilizada para re- RAMT é uma variável do sistema, com
„,ir>. d . máquinl ter números em ponto flutuante, núme- endereço armazenado nas locações 23 732
ros inteiros de cinco bytes e o conjunto e 23 733 (5CB5 e 5CB6 em hexa).
de parâmetros de cinco bytes. Começa Para verificar o valor de P-RAMT li-
«... d. r.H.V*
STKEND em STKBOT, cujo endereço ocupa as gue a máquina e entre essa linha:
stkbot locações 23 651 e 23 652 (5C63 e 5C64
PHINT PEEK 23732+256'PEEK 23733
em hexa), e termina em STKEND, que
eline
é encontrado em 23 653 e 23 654 (5C65 Isto retornará o valor 65535 no
VAUS e 5C66 em hexa). Spectrum de 48K, ou o valor 32767 no
PROG A área de memória de reserva permi- modelo de I6K. Se nenhum destes va-
Ir» da BASIC te que as áreas da memória situadas aci- lores for retornado pela linha, então al-
ma abaixo dela cresçam até que
e guma coisa está errada com o seu com-
CHANS STKEND encontre o indicador de pilha. putador. Pode-se examinar o conteúdo
Acima dos bytes sobressalentes está dos outros apontadores na área de va-
a pilha da máquina, empregada peia riáveisdo sistema, utilizando a mesma
doi nwradrivat UCP quando um programa BASIC é linha PRINT, apenas substituindo os
5CB6 dado. valores correspondentes às duas loca-
5C00 A pilha de sub-rotinas (GOSUB) ções de memória da variável.

se»
ouliw da mv«uora mazena os números de linha para os A palavra-chave PEEK em BASIC
quais um programa deve retornar quan- "olha" os conteúdos dos bytes da memó-
do completar cada sub-rotina chamada. ria e retorna o equivalente decimal do nú-
4000 O
ponteiro RAMTOP indica o final mero que encontrar. Oendereço tem o
BOM da memória RAM
disponível para o comprimento de dois bytes (requer duas
mazenamento de programas. Seu ende- locações da memória para ser armazena-
reço é retido em 23 730 e 23 731 do). O Spectnim divide
(5CB4 e 5CB5 em hexa) na
área das variáveis.
Acima de

RAMTOP há 168 locações
de me- mória que podem dereço s ^ii
ser usadas para armaze- hexa de quatro
nar 21 representações dígitos —
por exemplo,
ou padrões gráficos de- o endereço normal FF57 de RAMTOP
finidos pelo usuá- — em duas partes de F e 57.
rio. Entre- O byte mais baixo, 57, vai dentro do
endereço menor, e o byte mais aito,
FF, vai no endereço maior.
Isto explica por que a
segunda das loca-
ções da
IIIIIIIIIIMI ÓDIGO DE MAQUINA lllllli
ou 4FFF (20 479 em decimal), para o car- a segunda das duas locações da memória
tucho de 4K. no programa acima é multiplicada por 256.
Em todos esses casos, as variáveis do sis-
tema ocupam a área de 4000 a 4087 em he-
xa, ou 16 384 a 16 509 em decimal. As ou-
tras áreas não são fixas, e os endereços cor- O TRS-Coior tem uma memória ROM
respondentes aos seus limites —
D-FILE, de 32K, que vai da locação &H8000 à
WARS, E-LINE, STKBOT, STKEND, &HFFFF. Essa área é dividida em duas ou-
ERR-SP e RAM TOP são armazenados — tras: uma que controla a entrada e a saída
como apontadores nessa área das variáveis do computador em relação ao cartucho de
do sistema. ROM removível, e outra, não removível,
A área de programa BASIC, que vai de que contem o sistema operacional e o in-
16 509 a D-FILE, contém o programa em terpretador BASIC.
BASIC do usuário. Da locação D-FILE até Os programas em BASIC e suas variá-
a locação WARS, fica o arquivo de veis são armazenados na memó ria RAM,
exibição. entre as locações &H3600 a &H7FFF. Exis-
A área de variáveis vai se expandindo te também uma pilha que ocupa a pane
à medida que um programa em BASIC é mais elevada de RAM, logo abaixo da
executado e novas variáveis são definidas ROM, de &H7FFF para baixo. Mas a pi-
em seu interior. Essa área tem o seu final lha pode descer um pouco mais, de modo
assinalado pela locação da memória que a criar espaço para um programa em códi-
contém 80, em hexa. go de máquina. Isto é feito alterando-se o
Entre as locações E-LINE e STKBOT valor da variável do sistema, que aponta pa-
estão a área de edição e o espaço de traba- ra a base da pilha.
lha A linha que está sendo digitada pelo
teclado ocupa a área de edição. Seu con-
teúdo é transferido para a área do progra-
ma assim que a tecla < E.NTER > é pres-
MAPA DE MEMÓRIA
sionada. DO SINCLAIR ZX-81
Entre a locação STKEN D c o indicador
da pilha de máquina existe uma área de re-
serva de memória, para onde as áreas aci-
ma e abaixo dela podem se expandir. A pi- ROM
lha de máquina é usada pela máquina
B192
quando um programa BASIC é rodado; a
pilha de stib-rotinas (GOSUB) armazena
os números de linha para os quais um pro- NÃO UTILIZA CA

memória no grama deve retornar depois da execução de


1B384
programa acima uma sub-rotina.
VARIÁVEIS DO SISTEMA
é multiplicada por apontador RAMTOP designa o to-
O
256; do contrário, o po físico da memória —
isto é, 32 767, PROGRAMA
Spectrum poderia retornar 24 575, 20 479 ou 17 407, dependendo do ARQUIVO DE EXIBIÇÃO
j equivalente decimal de FF, cartucho de expansão RAM
conectado à
ao invés de FFOO. máquina. Tecle a linha seguinte:
Byla contendo 80 H

PRINT PEEK 16388+256*PEEK 16398 ARFO DE EDIÇÍO •


AfiEA DE TRABALHO
Os micros compatíveis com o mode- A linha retoma o valor decimal corres- STKBOT
lo Sinclair ZX-81 têm 8K de ROM, com pondente à RAM máxima disponível no
PILHA DA CALCULADORA
endereços que vão de 0000 a 1FFF em sistema. Você pode examinar o conteúdo
STKEND
hexa, ou de 0 a 8 190 em decimal. Os dos outros apontadores na área de variá-
outros 8K de memória, de 2000 a 3FFF, veis sistema, utilizando a mesma linha
do AREA DE RESERVA
não são utilizados. PRINT e substituindo os valores corres-
O mapa de memória mostrado aqui ser- pondentes às duas locações de memória da
ve para um ZX-81 com um cartucho de ex- variável.
PILHA DA MAQUINA
pansão de 16K RAM, cujos endereços vão A palavra-chave PEEK em BASIC
de 4000 a 7FFF em hexa, ou 16 384 a "olha" os conteúdos de cada byte da me-
32 767 em decimal." No caso de mória e retorna o equivalente decimal do
o computador ter um cartucho de número que encontrar.
PILHA DE SUB-HOTINAS
RAM de 8K ou um de 4K, bas- O endereço tem o comprimento de dois
ta "achatar" as áreas de memória bytes. O ZX-81 divide o endereço hexa de
no espaço correspondente de 8K quatro dígitos — por exemplo, o endereço
ou 4K, e fazer com que o topo fí- normal FF57 de RAMTOP — em duas
BOTINAS USB
sico da memória RAM i
partes de FF e 57. O byte mais baixo, 57,
^S^ser 5FFF (24 575 em decimal) vai no endereço menor, e o byte mais alto,
32767
a o cartucho de 8K, FF, no endereço maior. Isto explica por que
,

IIIIIIIIIIHH» tôDKVDEMOUm 7 IBBIIIIIIHIIII


Uma parte da RAM é reservada para oi- São uma coleçào de indicadores ou apon- A memória de vídeo também corres-
to páginas de gráficos de alta resolução, que tadores, que fornecem os endereços do ini- ponde a um mapeamento direto das 1 024
não correspondem exatamente às páginas cio de diversas áreas na memória e de ou- posições de caracteres na tela, ern memó-
de memória mencionadas antes. Eslas con- tras variáveis do sistema. ria RAM. Estende-se de 15 360 (canto su-
têm 256 locações, ou 0.25K. As páginas de O primeiro grupo de 256 bytes de — perior esquerdo da tela) a 16 383 (canto
gráficos, ao contrário, têm I.5K, e cada &H00 a &HFF —
é conhecido, no TRS- inferior direito). Assim, uma posição N na
uma guarda informação gráfica suficiente Color, como página direta. Qualquer das tela (correspondente ao parâmetro do
para preencher Ioda a leia na modalidade páginas de memória pode ser designada co- < PR1NT >) é armazenada na posição ab-
de resolução mais baixa — PMODE —
0 mo página direta, ou seja, a página cujas soluta de RAM igual a 15J60+N.
enquanto a modalidade de resolução mais locações podem ser endereçadas mediante A
área que vai das locações 16 384 a
alta — PMODE —4 necessita quatro des- a utilização de um endereço curto de um 17 384 (mil bytes, portanto) é a área do sis-
sas páginas para preencher totalmente a te- byte, em vez do endereço normal e maior tema, que contém apontadores, bujfers, in-
la. O
computador reserva automaticamente de dois bytes. Isto é feito definindo-se o re- dicadores e outras locações especiais de uso
quatro páginas, mas PCLEAR pode ser gistro da página direta no micropro- particular do interpretador BASIC e que
usado para reservar mais. cessador. podem ser examinados e alterados pelo
Quando não estão em uso, essas pági- usuário por meio de comandos PEEK e
nas são deixadas vazias. Mas, se uma me- POKE. O conteúdo inicial dos apontado-
mória poderão
extra for requisitada, elas Ql res e indicadores é estabelecido quando a
ser limpadas até a página 1 do BASIC. Is- máquina é ligada, ou quando é dado um
to permite o acesso a uma memória extra O TRS-80 tem um espaço máximo de RESET de iniciação.
de 10.5K. memória RAM de 48K, quando usado A área de programas e dados começa
A tela de texto ocupa l/2Kentre&H400 com o BASIC Nível II (máquinas com gra- na locação 17 385 (H3E9). Tem três dife-
e&H600. Isto corresponde a uma locação vador cassete), ou com o TRSDOS e equi- rentes compartimentos: a área do progra-
de memória para cada espaço de caracte- valentes (máquinas com disquete). Quan- ma, a das variáveis e a de cordões alfanu-
res na tela de dezesseis linhas de 32 carac- do esses micros são usados com o sistema méricos. Os limites entre essas três subá-
teres.Os caracteres, formado? por 96 pon- operacional CP/M, essa memória pode ser reas são alterados dinamicamente, em fun-
tos na tela (oito por doze pixels), são gera- expandida internamente para 64K de ção da execução do programa em BASIC
dos por um chip gerador de vídeo separado. RAM. Trataremos aqui apenas do mapa de e de alguns de seus comandos. Por exem-
As variáveis do sistema estão armaze- memória de máquinas compatíveis com o plo, o comando CLEAR fixa o tamanho
nadas na área que vai de &H000 a &H400. modelo III da Radio Shack, como é o ca- máximo da área de cordões, logo abaixo
so do Prológica CP-500. do topo lógico da RAM. Ao ser introduzi-
O espaço total de memória interna do do, o interpretador aloca automaticamen-
MAPA DE MEMÓRIA TRS-80 é de 65 535. ou HFFFF, em hexa. te cinquenta bytes a essa área.

DO TRS-COLOR O espaçoquevai doendereçoOa 14 435 (ou O procedimento usual para colocar um


H0000 a H3800) é ocupado pela memória programa em linguagem de máquina do
ROM do sistema: 12KdeEPROM conten- usuário é fixar um limite lógico máximo
do o sistema operacional e o interpretador de RAM, seja através da pergunta inicial,
BASIC Nível II, e 2K de EPROM adicio- da manipulação do ponteiro
seja através
nais para uso do sistema (total de 14K de que contém o endereço. Isto cria uma área
ROM).
A memória RAM começa sempre na lo-
cação 14 336 e se estende até o topo físico MAPA DE MEMÓRIA
da memória, que pode ser 32 767 (máqui-
nas com 16K), 49151 (máquinas de 32K)ou
DO TRS-80
65 535 (máquinas de 48K). Os endereços
em hexa são: H7FFF, HBFFF e HFFFF.
A RAMé dividida, por sua vez, em duas
partes principais: uma reservada para uso
do sistema, que vai de 14 336 a 17 384
(H380O a H43E8) e outra, que começa em
17 385 (H43E9) e vai até o topo lógico da
memória (RAMTOP). Essa locação está
armazenada na área de variáveis do siste-
ma, e é definida pela primeira vez quando
o computador é ligado, e faz a pergunta ao
operador (MEM SIZE?).
A área do sistema é subdividida, por sua
vez, em diversas áreas de comprimento fi-
xo e uma de participação flexível. As áreas
de comprimento fixo são as seguintes (ve-
ja o gráfico):
A
área matricial do teclado contém as
locações de memória m
apeadas no tecla-
do. Qualquer tecla pressionada "liga" bytes
correspondentes nessa área (que vai de
14 336 a 15 359).
IIIIIIIIIIIIIHI ' ^^^^llllllllll
protegida dememória onde é colocado o A memória RAM básica está no segun- ponível para abrigar programas em códi-
programa em linguagem de máquina por do compartimento. A área que vai de go de máquina. A
área dos blocos de con-
meio do monitor residente do TRS-80/1I &H0000 a &H7FFF (área livre) não é con- trole contém buffers e indicadores para
ou de programas monitores e Assembier trolada pelo interpretador BASIC. transferências de entrada e saída. Seu ta-
carregados externamente. A segunda área da RAMé controlada manho é definido internamente ou modi-
pelo interpretador BASIC e é dividida em ficado pelo comando MAXFILES do
duas partes principais: a primeira, mais alta BASIC.
e de comprimento fixo, é reservada para uso A área de cordões alfanuméricos vem
Os micros MSX apresentam algumas di- do sistema e vai de &F380 até o topo físico logo abaixo e contém os cordões definidos
ferenças entre si. Por isso, tomaremos co- da RAM. É a área do sistema e contém durante a execução do programa. Tem ta-
mo exemplo o micro nacional Sharp apontadores, buffers, indicadores e outras manho estabelecido pelo comando
HB-8000 (Hot-bit). Este dispõe de um es- locações de uso particular do interpretador CLEAR. Este pode conter um segundo ar-
paço máximo de memória de 128K, divi- BASIC e que podem ser examinados e al- gumento, que é a definição do topo lógico
dido em quatro síots. ou encaixes dispo- terados pelo usuário (comandos PEEK c da RAM. Por exemplo, CLEAR 200,
níveis, quando usado com o BASIC para POKE) &HDFFF fixa esse valor em &HDFFF.
gravador cassete. Essa memória tem RAM A segunda área, mais baixa, contém tu- A seguir vem a área da pilha, que tem
disponível de 64K. do o que é de uso do programa BASIC ar- comprimento fixo e contém os endereços
O espaço de memória do Sharp é divi- mazenado e é subdividida em áreas de com- de retorno das sub-rotinas (GOSLíB) e dos
dido em doi s com partimentos de 65 535 primento variável. laços FOR...NEXT.
bytes, ou &HFFFF, em hexa. No primeiro, A área de blocos de controle dos arqui- A área que se inicia em 32 768
o espaço que vai de 0 a 32 767 (ou &H0000 vos tem como limite máximo o topo lógi- (&H8000) é a área de programa, que abri-
a &H7FFF) é ocupado peia memória co da área do nsuário. Esse valor é defini- ga o texto do programa. Acima dela exis-
ROM; ele contém o interpretador BASIC do como sendo &HF380, mas pode ser mo- tem duas áreas dinâmicas, que crescem à
e o sistema operacional. O espaço restan- dificado para baixo (comando CLEAR). medida que o programa é executado: a área
te, de 3 2 768 a 65 575 (&H8000 a Se um valor diferente deste for estipulado de variáveis e a área das matrizes. A área
&HFFFF), é utilizado para endereçamen- pelo CLEAR, a área livre entre essa loca- de reserva de memória para programa (área
to dos cartuchos removíveis de ROM. ção máxima e a locação &HF380 fica dis- residual ) correspondei diferença entre a so-
ma das áreas fixas (pilha, cordões e blocos
de E/S) e a soma das áreas variáveis (pro-
grama, variáveis e texto).
MAPA DE MEMÓRIA DO MSX A memória de vídeo do MSX também
corresponde a um mapeamento direto de
posições de caracteres ou de gráficos cm di-
versas páginas. São 16K de RAMque têm
seu endereçamento à parte.
A tela de vídeo é tratada pelo micropro-
tumn / ima cessador central como um dispositivo de
entrada e saída, e o BASIC dispõe de vá-
rios comandos para fazer funcionar esse es-
quema, inclusive leitura e gravação abso-
luta (VPEEK e VPOKE).

MM
32 K 32K O Apple íleo TK-2000 utilizam o mi-
croprocessador 6502, de oito bits. Seu es-
paço total de endereçamento de memória
é de 64K, dividido em 256 páginas de 256
bytes. Essas páginas são alocadas para di-
ferentes funções pela UCP e pelas rotinas
operacionais, e constituem o mapa de me-
8MB 8000 mória do Apple. Na configuração padrão
Ana do
desses micros, somente 48K são disponí-
veis para o usuário (RAM), mesmo assim
Área das Variáveis parcialmente, pois uma parte é reservada
para uso do sistema. Os 16K restantes cor-
RDM
Cartuchos
respondem à memória ROM. A forma
Memoria flesidual
básica de organização da memória é seme-
32 K
Arbb da Pilha lhante para os micros da linha Apple II e
para o TK-2000.
Area de STRINGS
A organização da memória do Apple II
Bloco da Controle doa Arquivos depende do tipo de linguagem empregada
F380
(INTEGER BASIC, FPBASIC ou AP-
FFFF PLESOFT), de se está sendo utilizado dis-
SLOT0 SLOT 3 quete ou não, e da versão do sistema ope- i

racional de disquete (DOS). Além disso, é |


IIIIIIIIIIIHHI 7 CÔOIGOOtmOWNA 7 1111
possível expandir-se a memória me- RAM O Apple tem quatro arcas de vídeo: duas
diante bancos adicionais, para 64K ou páginas situadas na parte baixa da memó- MAPA DE MEMÓRIA
128K. Examinaremos aqui o mapa de me- ria (antes do inicio da área de programas)
mória para a configuração básica, ou se- e duas na pane alta da RAM. Já o TK-2000 DO APPLE II

ja, um Apple II com 48K de memória tem somente duas áreas, ambas na parte
RAM e sistema cassete: alta da memória.
A área da memória ROM, que se esten- A área de texto do Apple e do TK-2000
de das páginas $C1 a SFF (em hexa), con- também é usada para gráficos de baixa re-
tém o código de máquina necessário para solução (GR), ao passo que as áreas de grá-
a operação e programação da máquina — ficos de alta resolução são separadas ape- 0000
o interpretador BASIC, o monitor, e, no ca- nas no Apple.
so do TK-2000, também um disassembler Finalmente, a terceira área é a área de
e um míni-assembler. memória RAM, que vai da página 0 à pá- Primeira Pèginn Te*to
A área de entrada/saída é uma página gina 19! ($00 a SBF, em hexa). 0800
de 1K, que inclui uma série de registros, A memória RAM também ê subdividi- Segunda Pagina Tsito

áreas de memória intermediária, aponta- da em áreas de tamanho fixo ou variável, coo


dores e indicadores relativos aos dispositi- conforme a aplicação: RAM BK
vos de entrada e saída da máquina (vídeo, A área de variáveis do sistema é arma-
som, gravador cassete, teclado, seleção de zenada na página 0 e comem apontadores 1FFF
RAM, etc). Além disso, existem áreas de e indicadores atualizados pelaUCP. A pi- 2000 Primeira Pagina Vídeo
3FFF
memória reservadas para as páginas de ví- lha da máquina ocupa a página 1, e tem
Segunda Pag.ne Vídeo
deo, que servem para mapear os textos e 256 bytes. Ela serve para diversos fins, po- GFFF
8000
gráficos que nele aparecem. dendo inclusive ser utilizada pelo progra-
Os endereços das áreas de vídeo são di- mador em linguagem de máquina; normal-
ferentes para o TK-2000 e para os micros mente, ela guarda os endereços de retorno
da linha Apple: de sub-rotinas e laços em BASIC. A área RAM
24 K
de edição, alocada na página 3, contém o
Apple TK-2000 buffer (memória intermediária) do tecla-
do, ou seja, a última linha digitada.
TEXTO Pág. 1 0400-07FF 2000-3 FFF A área de trabalho, que se estende das BFFF
TEXTO Pág. 2 0800-OBFF A000-BFFF páginas 3 a 7, também é reservada para o COSO
HGR Pág. 2000-3FFF 2000-3FFF
1 sistema operacional, para o monitor e pa-
HGR Pág. 2 4O00-5FFF AOOO-BFFF ra diversas rotinas de E/S. Alguns endere-
ços dessa área podem ser utilizados pelo
programador em linguagem de máquina ROM
MAPA DE MEMÓRIA
DO TK-2000
para colocar seus próprios programas,
como para modificar alguns
dicadores que permitem alterar a maneira
pela qual a UCP processa os dados na me-
mória e nos dispositivos de E/S.
bem
ponteiros e in-

FFFF LUHUlHi
16 K

p
0000
Finalmente, o espaço que vai da página
Ana do 8 em diante è a área do usuária Os pro- ra alterar esses endereços. Assim,
Sistema
87FF gramas em BASIC começam normalmen- deslocando-se simultaneamente o endere-
3800 te na página 8, que também pode ser utili- ço,de início de um programa BASIC para
FIAM zada para programas em linguagem de má- uma posição acima da primeira área de ví-
BK quina. Nos micros da linha Apple, contu- deo (isto é feito com dois comandos PO-
do, esse espaço de RAM não fica inteira- KE) e os parâmetros HIMEMe LOMEM,
1FFF
2000 Primoira Pégina Vídeo mente disponível para os programas do é possível preservar-se a primeira página de
3FFF
4000 usuário. Bem no meio da área do usuário vídeo.
estão as duas página* do vídeo referidas aci- O Apple íleo TK-2000 têm a capaci-
ma. Usando comandos POKE, nos micros dade de selecionar a RAM ou a ROM pa-
da linha Apple, e os comandos MP e MA, raexecução de programas residentes em
no TK-2000, é possível comutar-se a utili- memória. Essa opção é armazenada em
zação da primeira área de vídeo, passando- dois indicadores situados na área de entra-
9FFF
a para a segunda, situada mais acima. da/saída, que podem ser modificados por
A000 SegunOa Pagina Vídeo
Os programas em BASIC começam a dois POKE. No TK-2000, o apontador RO
BFFF
COTtO
partir de &H0800. Por isso, sobram cerca ROM
seleciona a e está na locação $C05 A.
de seis Kbytes até o começo da primeira O Apontador RA seleciona a RAM e está
Em rada /Salda área de vídeo. Se você quiser utilizá-la, o em JC05B. Ao ser ligada a máquina, é se-
COOF
Cl 00 truque acima não funcionará. Mas há uma lecionada a ROM, o que ativa o interpre-
alternativa. A área de variáveis do BASIC tador BASIC residente. O programador po-
ROM tem dois limites definidos por dois apon- de alterar esses endereços e dar ordem pa-
18 K
tadores na área de variáveis tio sistema: LO- ra que o micro execute código de máquina
MEM, que define o limite inferior dessa (primeiro endereço da RAM). O botão
FFFF área, e HIMEM, seu limite superior. Exis- < RESET > eas teclas <CTRL> <RE-
tem comandos equivalentes em BASIC pa- SET> fazem uma resseleção da ROM.
5 APUCAÇÕCS 5

COMO FUNCIONA 0 PROGRAMA

IEUNÂ SEUS DADOS ENT RADA DAS INFORMA ÇÕES


CORREÇÒES
ELABORAÇÃO DOS GRÁFICOS
EM GRÁFICOS ARMAZENAGEM DOS DADOS

na Bolsa, ele. Esse tipo de informação, os computadores apresentados aqui pos-


Digite os números e deixe o micro
que em geral envolve uma quantidade suem capacidade numérica e gráfica que
convertê-los em histogramas coloridos
enorme de números, torna-se de fácil os habilita a efetuar esse tipo de traba-
e bem-feitos. Por meio deles, será compreensão quando representado por lho, com graus variáveis de precisão e
fácil comparar valores diversos ou diagramas ou gráficos. E se preparar um de detalhamento gráfico.
manualmente é trabalhoso, pa-
gráfico Dificilmente o usuário médio de com-
verificar suas tendências temporais.
raum computador comercial trata-se de putadores domésticos precisará lidar
tarefa simples e rápida. com a vasta quantidade de informações
A capacidade de representar informa- geradas, por exemplo, por uma peque-
Você já deve ler visto alguns anún- ções não é, entretanto, atributo exclu- na empresa. Mas numerosas questões
cios de programas para aplicações co- sivo dos computadores comerciais. Ela que lhe interessam diretamente podem
esiende-se, também, aos computadores ser analisadas de maneira proveitosa em
merciais, nos quais se destaca a elabo-
ração de gráficos sobre estatísticas de domésticos, constituindo-se em uma de um microcomputador. Por exemplo, a
vendas, evolução de cotação das ações suas áreas de aplicação prática. Todos relação entre seus rendimentos e gastos
5 APLICAÇÕES 5

ao longo dc uni ano; o peso especifico,


em períodos distintos, dos di\ ursos itens
que compõem seu ornamento; as varia-
ções mensais de sua capacidade de
poupança.
Além dessas arcas, cujas aplicações
se assemelham ás comerciais, existem
várias outras, sobretudo relacionadas
com algum tipo de passatempo, que po-
dem ter seus dados analisados e repre-
sentados graficamente: a frequência ao
clube local ou a espetaculos teatrais em
determinado período, a evolução Cio nú-
mero de itens em coleções de livros, dis-
cos ou selos e estatísticas de resultados
esportivos.
O programa apresentado serve para
preparar, rapidamente, um gráfico de
barras —ou histograma — . mostrando
as variações temporais de algum tipo de
valor. Como os eixos do gráfico (hori-
zontal e vertical) ajustam-se automati-
camente, pode-se trabalhar com dados
semanais, mensais, anuais ou on qual-
quer ouira unidade de tempo
O intervalo máximo de valores utili-
zado pelo programa depende do seu
computador. Para o ÍRS-Colof, esses
valores situam-se entre tWc ~99. Pa-
ra o Speetrum. entre + KWKI e -1000,
mais ou menos, .lá para o Apple e o
MSX, lais valore-, podem ter qualquer
amplitude —unidades, de/enajÉ cenie-
nas. milhares e até milhões, -e tua apli-
cação assim requerer.

ENTRADA DOS DADOS

Ao executar o programa, este apre-


sentará na tela uma lista das opções dis-
poníveis (o menu). Se for selec^
opção para a entrada de dadol apresentar até 200 barras, mas seu limi- de do programa, a solução é fornecer os
grama pedirá os títulos dos doT te prático é de cerca de 65. Acima deste dados divididos ou multiplicados por al-
apresentando-os no momento | valor, as barras ficam muito finas ou ir- gum fator de conversão (por exemplo,
traçar o gráfico. regulares, constituindo um quadro vi- em unidades dc centenas, milhares, mi-
Ao entrar com os títulos d4 sualmente pouco claro. lhões, etc).
tenha sempre o cuidado de ( As perguntas seguintes feitas pelo Quando o último vaior for introduzi-
corretamente e na ordem pedid programa referem-se aos valores dos da- do, surgirá novamente a lista inicial de
xo horizontal (X) representa < dos. São apresentados na leia os núme- opções. Você poderá, então, escolher en-
semanas, meses, anos ou qualJ ros sequenciais das barras e uma pergun- tre modificar algum valor digitado ou
tra unidade escolhida. O (' ta sobre o valor a ser atribuído a cada partir para a apresentação do gráfico. Se
(Y) representa os valores dadol uma. Esse valor, positivo ou negativo, optar pela modificação, os valores que di-
ras — cruzados, temperatura, núrr é, novamente, limitado pela capacida- gitou serão apresentados na tela. Siga as
de discos, etc. A altura de cada uma das de numérica do seu computador. No instruções para corrigir o valor desejado.
barras será proporcional a esie valor. TRS-Color, os valores vão de -999 a Quando estiver satisfeito com os va-
Em seguida, o programa pede o nú- + 999 e, no Speetrum, de -1000 a lores, selecione a opção que permite a
mero de barras que deve apresentar. O + 1000. O Apple e o MXS. por sua vez, apresentação do gráfico. Os usuários do
número máximo possível depende, ba- trabalham com valores de qualquer Apple e do MSX possuem apenas uma
sicamente, da capacidade gráfica do seu magnitude, já que os gráficos são mon- maneira de apresentar seus gráficos.
computador. O Speetrum, por exemplo, tados com o uso de escalas. Usuários do TRS-Color e do Sinclair
apresenta no máximo 25 barras; no Se «ti computador é um Speetrum ou Speetrum podem escolher entre um grá-
TRS-Color. este número passa a 26; o um TRS-Color, e você deseja represen-
Apple e o MSX têm capacidade para tar valores que estão fora da capacida-
5 APLICAÇÕES 5

são armazenados nas variáveis LO e Hl.


respectivamente. O
valor mínimo prede-
finido é sempre zero; se os dados apre-
sentarem um valor mínimo maior, este
será ignorado pelo programa. valor O
máximo é arredondado: 10. 100, 1000,
10 000, etc.
Havendo dados negalivos no conjun-
EO A (valor mínimo menor que zero}, o
programa definirá que o gráfico é de ti-
po l; senão, de tipo 2. Nos gráficos de
tipo a linha de base (eixo dos \) fica-
1 ,

rá acima do fundo da tela. e as barras


correspondentes aos valores negativos
serão dirigidas para baixo.
O escalamento dos valores de um ei-
xo é feito segundo uma regra simples,
que leva em conta os valores mínimo e
máximo, o número de pixels (pontos
gráficos) que cabem no eixo e o arredon-
damento ou não dos rótulos ao longo do
eixo. A fórmula de escalamento é:

nax - xmin

onde:

x' = valor escalado


x = valor original
xmin « valor mínimo na escala
xmax = valor máximo na escala
pix número máximo de pixels no
eixo

Em seguida, 0 gráfico é elaborado.


Cada computador utiliza um método
distinto para traçar as barras. Se você
conhecer um pouco de programação
BASIC, poderá, nesse ponto, alterar o
programa para fazer coisas diferentes.
Por exemplo, a versão para o Sinclair
Spectrum utiliza o comando PLOT pa-
ra posicionar o cursor gráfico no ponto
A opção de um gráfico escalonado COMO FUNCIONA 0 PROGRAMA onde a barra vertical será traçada, e o
apresenta o diagrama de barras com as comando DRAW, para traçá-la de uma
dimensões, ao longo do eixo y, arredon- vez. Se você substituir o comando
dadas para um valor máximo de 10, 100, O programa de elaboração de histo- DRAW por Um outro PLOT, obterá
1000, ele, dependendo do valor máxi- gramas tem três rotinas principais: apenas um ponto colorido, correspon-
mo dos dados. Conforme este valor, po- dente ao topo da barra.
rém, o gráfico pode não aparecer intei- • entrada dos dados que serão exibidos Outra modificação se refere à defini-
ramente na (ela. no gráfico; ção das cores. No Sinclair Spectrum,
A opção de um gráfico em represen- • edição (modificação) dos dados já en- por exemplo, o comando INK determi-
tação real mostra o diagrama de barras trados; na a cor a ser usada na barra. Note que
ocupando a tela inteira, apresentando os • elaboração do gráfico. a variável que se segue a este comando
valores reais dos dados (não os valores é modificada automaticamente pelo pro-
em escala) ao longo do eixo y. Os dados são armazenados no con- «rama, de modo a alterar a cor da bar-
Para maior clareza, as barras apre- junto A peia primeira rotina. A capaci- ra seguinte. Por meio de um comando
sentadas pelo Apple, pelo MSX e pelo dade desse conjunto é especificada di- 1NPUT, você pode mudar o programa,
Spectrum são separadas umas das ou- namicamente pelo comando DIM, após determinando que a cor seja solicitada
tras por um pequeno espaço ou uma o usuário indicar o número de dados que ao usuário.
barra colorida. O TRS-Color apresenta deseja utilizar. Quando 0 programa en- Interessante também é a possibilida-

as barras coloridas alternadamente de tra na rotina de elaboração do gráfico, de de modificar o programa para arma-
cinza e amarelo, para os valores positi- o conjunto de dados é examinado, para zenar os dados entrado ;, em fita casse-
1

vos, e de vermelho e laranja, para os va- que se identifiquem os valores mínimo te ou disquete. Nesse caso, o menu ini-

lores negativos. e máximo nele presentes. Esses valores cial deverá ter duas opções adicionais:
I
): K

5 APUCAÇÕCS 5

MSX: gráfico da variação de temperatura ao longo do ano. ZX Spectrum: gráfico de lucros e perdas por 11

• armazenar dados 1020 MD-INT(16-LEN(XS)/2> ISO


" gravar dados 1030 INPUT"NOME DO EIXO Y" YS ; 2170 BS-STR$(INT(.5+BT/10"E))
1040 YS=LEFTS(Y$.12Í IF YS-"" T : 2180 SL-1:LP-NB:IF NB>26 THEN L
HEN YS-"EIX0 Y" P-26
As roiinas correspondemos a estas
1050 HT-INT(6-LEN[Y$)/2) 2190 POKE 179.243:PCLS:POKE 654
chamadas deverão ser programadas c 1060 INPUT-NUMERO DE BARRAS" NB
adicionadas ao programa. Assim, você
; 75.0:POKE 65477, 0:POKE 65479.0
1070 NB- INT (NB) IF NB<1 THEN 10
:
2200 POKE 179,2
poderá mamer séries de dados armaze- 60 2210 LINE (40 0) - (47 191 PRESET
, . ) ,

nados (por exemplo, os rendimentos da 1080 BL-INT(26/NB) :IF BL<1 THEN .BF
caderneta de poupança ou os gastos BL-1 2220 IF T$«"" THEN 2260
mensais com alimentação) e amalizá-los 1090 DIM A (NB) 2230 FOR K-l TO LEN (TS) P-ASC (M :

com novos valores sempre que quiser 1100 PRINT IDSITS.K.l)) AND 63:FOR K-0 TO
compará-los ou verificar sua tendência 1110 FOR K-l TO NB 11
por meio do gráfico. Com esta modifi- 1120 PRINT"VALOR DA BARRA" K r ; : 2240 POKE 1540-LEN(TS)+32"M+K,P
NPUT A (K) 2250 NEXT M
cação, você não precisará, portanto, di- ,

1130 NEXT 2260 IF B$-"" THEN 2300


gitar os dados anteriores toda vez que
1140 RETURN 2270 FOR K-l TO LEN (BS) P-ASC (M
executar um programa pai a elaboração
:

2000 IF DA-0 THEN PRINT #455. "D IDS (BS K 1


, AND 63:FOR M-0 TO 1
, ) )
de gráfico. ADOS NAO INTRODUZIDOS": FOR K-l 1
TO 2000:NEXT:RETURN 2280 POKE 6916-LEN(BS)+M*32+K,P
2010 TP-0:BT-0 2290 NEXT M.K
2020 FOR K-l TO NB 2300 FOR K-l TO LEN(XS)
2030 IF A(K)>TP THEN TP-A(K) 2310 P-ASC{MIDS(XS.K.U) AND 63
10 PMODE 4.1 2040 IF A(K)<BT THEN BT-A(K) 2320 FOR M-182 TO 190:POKE 1503
20 CLS 2050 NEXT +MD+32*M+K.P:NEXT
30 PRINT #45 *MENU" PRINT «102.
.
: 2060 IF TP-0 AND BT-0 THEN PRIN 2330 NEXT
"1- INTRODUZIR DADOS":PRINT 816 T "TODOS OS VALORES SAO ZERO " 2340 FOR K-l TO LEN(YS)
6, "2- GRÁFICO DE BARRAS" PRINT : FOR K-l TO 2000: NEXT: RETURN 2350 FOR M-0 TO 11
#230, "3- VER/CORRIGIR DAD0S":PR 2070 CLS: PRINT #64,"VOCE QUER U 2360 P-ASC(MID$(Y$,K,1)) AND 63
INT §294, "4- SAIR DO PROGRAMA" M GRÁFICO EM ESCALA (S/N)?" 2370 POKE 1566+384*(K+HT)+32*M,
40 AS-INKEYS:IF AS<"1" OR AS>"4 2080 A$-INKEYS:IF ASO"?" AND A P
" THEN 40 5<>*N" THEN 2080 2380 NEXT M.K
50 IF AS="1" AND DA-1 THEN 80 2090 IF AS-"N" THEN 2120 2390 FOR K-5 TO 31
60 ON UAL (AS) GOSUB 1000.2000,3 2100 IF TP>0 THEN E-INT (LOG (TP) 2400 POKE 1S36+32*ST+K,12B
000.4000 /LOG(IO) :TP-INT(1+TP/ (10"E) "1
)
)
2410 NEXT
70 GOTO 20 0"E 2420 FOR K-ST TO 0 STEP -22
80 PRINT #484."V0CE TEM CERTEZA 2110 IF BT<0 THEN E-INT (LOG (-BT 2430 POKE 1541+K*32,202
) /LOG (10) BT--INT 1-BT/ (10 "E)
) : ( 2440 NEXT
90 AS=INKEY$:IF AS<>"Y" AND AS< *10-E 2450 FOR K-ST TO 178 STEP 22
>"N* THEN 90 2120 IN-176/(TP-BT) 2460 POKE 1541+K*32.202
100 IF A$-"Y" THEN CLEAR 200:AS 2130 ST-INT(IN*TP) 2470 NEXT
-"l":GOT0 60 2140 TS-"":IF TP-0 THEN 2160 2480 FOR K-SL TO LP:CO-(C0+l) A
110 GOTO 20 2150 IF TP>ABS(BT) THEN E-2«INT ND 1
1000 DA-1 -CLS: INPUT"NOME DO EIX (LOG(TP)/LOG(1000)) ELSE E-2-IN 2490 POKE 178. 35+CC64 POKE 179
T (LOG {ABS (BT))/LOG (1000)) 3+CO* 1 9?^^^^^^^^^^^^M :

1010 XS-LEFTS (X$ 32) , : IF X5-"" T 2160 TS-"+"+MID$(STR$(INT(.5+TP 2500 IF INT(A(K)*IN)>0 THEN LIN
HEN XS-"EIXO X" /10~E)) ,2} :B$-"" :IF BT-0 THEN 2 E(48+8* (K-SL) *BL,ST-D- (47+8* (K
; : ;

5 APLICAÇÕES S

TRS-Color; grafito da dislrihuiçào das notas Apple: gráfico dos saldos mensais da poupai

-SL+1)*BL.ST-INT(A(K)*IN)) PSET 3200 GOTO 3020


.

4000 CLS:PRINT §37."VOCE TEM CE 1030 PRINT INVERSE 1 ;AT 0.0;"


.BF ";xSi"
"
2510 IF FIX(A(K) «INXO THEN LIN RTEZA (S/N)?"
4010 AS"INKEYS:IF ASO"S" AND A 1040 INPUT "NOME DO EIXO Y?
E (48+8* (K-SL) «BL.ST) - (47+8* (K-S
SO"N" THEN 4010 LINE yS
L+1)*BL.ST-FIX<A(K)*IN) ) , PRESET 1050 PRINT INVERSE 1 AT 0,16;"
.BF
4020 IF AS-"N" THEN RETURN "
;

"syS;"
2520 NEXT K 1060 LET uS-"QUANTO "+xS+" d A
2530 IF LP-NB THEN 2570 25) ? " :GOSUB 500
2540 SL-LP+1:LP-LP+26:IF LP>NB 1070 IF v<l OR v>25 OR vOINT v
THEN LP-NB THEN GOTO 1060
2550 IF INKEYS""" THEN 2550 1090 LET E-Vi DIM a (z)
2560 POKE 179.243:LINE(48.0)-(2 100 BORDER PAPER 7: INK 0: 1100 FOR k-l TO z
55.178) PBESET BF GOTO 2390
, . :
CLS 1110 LET WS-"DIGITE DADOS PARA
2570 IF INKEYS-"" THEN 2570 110 PHINT BRIGHT li PAPER 3 "+STRS k + " " GOSUB 500
:

2580 BE TU RN INK 7; AT 4 10;"OPCOES" 1120 LET a(k)-v


3000 IF DA-0 THEN PRINT §455 "D
,

120 PRINT BRIGHT 1; AT 7,4;" 1 1130 PRINT k,a(k)


ADOS NAO INTRODUZIDOS" FOR K-l :
- INTRODUZIR NOVOS DADOS
"
1140 NEXT k: LET g=l PAUSE 50:
;

TO 2000:NEXT:RETURN 130 PRINT BRIGHT 1 AT 9.4;" 2


i
RETURN
3010 SL-1 :LP-NB IF NB>14 THEN L : - VER / EDITAR DADOS 2000 REM **ROTINA PARA EDICAO D
P-14 140 PRINT BRIGHT 1 AT 11.4;"
; E DADOS**
3020 CLS PRINT "BARRA" "VALOR*
.
:
3- GRÁFICO EM ESCALA 2010 BORDER 2: PAPER 2: INK 7
3030 FOR K-SL TO LP 145 PRINT BRIGHT 1 AT 13.4;"
; 2020 LET cn-1
"
3040 PRINT K,A[K) 4- GRÁFICO EM TELA CHEIA 2025 CLS PRINT PAPER 6; INX
:

"
3050 NEXT 150 PRINT BRIGHT li FLASH 1; 2;AT 0.0;xS.yS:TAB 31;"
3060 IF NB-LP THEN 3130 INK 2;AT 16.9;" SELECIONE OPCA 2030 PRINT cn.a(cn)
3070 PRINT §480. "e PARA EDITAR. 2035 PRINT |lj PAPER 6; INK 2;A
QUALQUER OUTRA PARA CONTINUA 160 II INKEYS 3 "" THEN GOTO T 0.0;"EDIT para alterar valor
R" corrente Qualquer tecla para co
3080 AS-INKEYS:IF AS-"" THEN 30 170 LET AS-INKEYS: IF AS<" ntli
80 OR AS>"4" THEN GOTO 160
3090 IF AS-"E" THEN 3170 180 GOSUB VAL AS*1000; GOTO THEN GOTO 20
3100 SL-LP+1:LP-LP+14 100 50
3110 IF LP>NB THEN LP-NB 500 REM "ROTINA PARA ENTRADA 2060 LET cS-INKEYS
3120 GOTO 3020 DE DADOS NUMÉRICOS"* 2070 IF cS-CHRS 7 THEN GOSUB 2
3130 PRINT §460, "e PARA EDITAR. 510 INPUT (wSl: LINE aS IF : 500
QUALQUER OUTRA PARA RETORNAR LEN a$-0 THEN GOTO 510 2080 IF cn-z THEN PRINT PAPER
520 FOR 3-1 TO LEN aS 6; INK 2; "FIM DOS DADOS": PAUS
3140 AS--ÍNKEYS:IF AS-"" THEN 31 540AIF (aS(J)>*"0" AND aS(j)<- t 100 RETURN
:

40 "9") OR aS(3)-"-" OR aS(J)-"-" 2090 LET cn-cn+1: IF cn-21 THEN


3150 IF AS="E" THEN 3170 THEN NEXT Ji LET v-VAL aS GOTO 2025
3160 RETURN RETURN 2100 GOTO 2030
31^0 CLS PRINT INPUT"NUMERO DA :
550 GOTO 510 2500 LET wS="INTRODUZIR NOVO VA
LOR PARA "+STRS cn+" ". GOSUB 5
:

ENTRADA A SER EDITADA ?";E 1000 BEM **ROTINA PARA ENTRADA


3180 E-INT(E):IF E<1 OR E>NB TH DE DADOS** 00
EN 3170^^^^^^^^^^^^^^ 1010 BORDER 1: PAPER 1: INK 7- 2510 LET afe -v )

3190 PRINT:PRINT"NOVO VALOR DA CLS 6; INK 2;cn.


ENTRADA" ; E ; : INPUT A (E) 1020 INPUT "NOME DO EIXO X? "j ETURN
5 APLICAÇÕES 5

3000 BEM "GRÁFICO EM ESCALA*" 2000 IFNBÍ-OTHEN10


3010 BORDER 0: PAPER 0: INK 7: 2010 GOSUB150
CLS LET hl-0: LET lo-oB
: 2020 IFSGN (HI OSGN (LO) THENHT-A
)

3020 FOR k-1 TO z BS(HI)+ABS(LO) :GOTO2050


3030 IF a(k)>hi THEN LEThi-a( 2030 HT-ABS<(SGN(HI)-1)*ABS(HI)
+ (SGN (LO)— 1) «ABS (LO) )

3040 IF aíkKlo THEN LET lo-a< 4010 BORDER PAPER 0: INK 7:


0: 2040 IFHT-0THEN10
*) m CL*-: LET hl-0: LET lo-O 2050 A-2-INT{(180-3*NBÍ)/NBI/2'
3050 NEXT k 4020 FOR n-1 TO z :S-3:ES-150/HT
3060 LET type-2: LET orgM 4030 IF a(n)>hi THEN LET hi-a( 2060 IFA>15THENA-15
3070 IF lo<0 THEN LET type-1: n) 2070 IFLO>-0THENY-155:GOTO2100
LET org-84 4040 IF a(n)<lo THEN LET lo=a( 2080 IFHK-0THENY-5:GOTO2100
3080 LET h-hl: IF ABS lo>hl THE rO 2090 Y-INT(80+(ABS(HI)-ABS(LO))
N LET h-ABS lo 4050 NEXT n •ES/2)
3090 LET ra-hi-lo 4060 LET ra-hi-lo: LET ft-175/r 2100 SCREEN2:COLOR 15.4,4:P-61
3100 IF h<-l THEN LET hi-1 GO : a: LET org-(ra-hi)*ft 2110 LINE (55,5)-(55,158) :LINE
TO 3150 4070 LET wd-INT (25/z) (52,Y)-(250,Y)
3110 IF hO10 THEN LET hi-10: 4080 PLOT 56,org: DRAW 198,0 2120 FORI-1TONBÍ
GOTO 3150 4090 PLOT 55,0: DRAW 0.175 2130 LINE ÍP,Y-SGN{VA(I)))-(P+A
3120 IF h<-100 THEN LET hl-100 4100 PRINT 11; PAPER 1 AT 0,14; ; ,INT(Y-{VA(I)*ES) ,6,BF ) )

: GOTO 3150 • ";xS;" " 2140 P-P+S+A:NEXT


3130 IF 1K-1000 THEN LET hl-10 4110 LET ZS-" "+YS+" " 2150 OPEN "GRP " FOR OUTPUTAS»
:

00: GOTO 3150 4120 FOR n-1 TO LEN zS 1


3140 IF h<-10000 THEN LET hl-1 4130 PRINT AT n+(19-LEN yS)/2.0 2160 PRESET(0,3)
0000 i PAPER l:zS(n) 2170 FORI-1TOLEN (Y$)
3150 LET wd-INT (25/zl I 4im NEXT n 2180 PHINT|1,TAB(1)MIDS(YS.I.D
3160 IF type-1 THEN LET ft-B0/ 4150 PRINT AT 0,0;hl;AT 21.0;lo :NEXT
hi 4200 GOTO 3400 2190 PRESET (170.160)
3170 IF type-2 THEN LET ft-162 2200 PRINTtl.XS
/hl 2210 IFSGN(LO)OSGN(HI)THEN2250
fffi 2220 PRESET(O.Y) PRINT» 1 TAB 4
3180 PLOT 56,org; DHAW 198,0 : . (

3190 PLOT 55.4: DRAU 0,160 10 CLS RESTORE


:
0"
3200 FOR n*4 TO 168 STEP B: PLO 20 DATA ENTRAR DADOS GRÁFICO DE .
2230 PRESET(15,155+(150MHI>0))
T 52, n: DRAW 3„ 0 NEXT til
:
BARRAS VER/ EDITAR DADOS FIM DE
, ,
):PRINT#l,LO*(-(SGN(LO)— 1))+HI
3220 PRINT t 1 PAPER 1 AT 0.14;
; ;
PROGRAMA «(-(SGN(HI)-D)
• " 2240 GOTO 2270
*txtt' 30 LOCATE7.2:PRINT"M E N U P
3225 LET ZS-" "+yS+" *
3230 FOR n-1 TO LEN zS
I RINCIPAL" 2250 PRESET(15.155) ;PRINTIl,LO:
PRESET(15,5) PRINT»!, HI
40 F0RI-1T04:READMS :

3240 PRINT AT n+ U9-LEN y$)/2,0 50 LOCATE10,2*I+7:PRINTI;"- " ;

; PAPER l;zS(n) 9
3250 NEXT n 60 NEXT
3255 LET dc»l 80 PRINT PRINT PHINTTAB (20) "O PÇ
: :

3260 IF type-1 THEN GOTO 3320 XOAr;


3270 FOR n-hl TO 0 STEP -{hl/10 90 RS-1NKEYS IFRS-" "THEN90 :

100 IFRS< '1"ORRS>"4"THEN90


,

)
3275 IF n<.01 THEN LET 0-0 110 ONVAL (RS) GOTO1000 ,2000, 3000
32B0 LET n$-STRS n ,4000
3290 PRINT AT dc.(6-LEN n8);n 150 LO-VA(l) :HI-VA(1)
3295 LET dc-dc+2 160 FORI=lTONB*
3300 NEXT n 170 IFVA(I)>HITHENHI~VA(I)
3310 GOTO 3400 180 IFVA(IXLOTHENLO-VA(I)
3320 FOR n-hi TO -hi STEP -(hi/ 190 NEXT RETURN :

1000 CLS IFNBtOOTHENLOCATElO 1


: ,

3330 IF n<.01 AND n>-.01 THEN 4: PRINT"CONFIRMA7 " ELSE1030 ;

LET n-0 1010 RS-INKEYSlIFRS-^THENlOlO


3340 LET nS-STRS ri 1020 IFRS<>"S"THEN10
3350 PRINT AT dc,(6-LEN n$):n 1030 CLS LOCATE1 0 PRINT" ENTRADA
: :

3360 LET dc-dc+2 DE DADOS"


3370 NEXT n 1040 CLEAR:LOCATE0.4:INPUT"NOME
3400 LET ink-1 DO EIXO-X " ;X$
3410 FOR n-1 TO z 10p0 XS-LEFTS (XS ,9) IFXS-""THEN :

3420 LET cm-org XS-"EIXO-X"


3430 LET ink-ink+1: IF inK-8 TH 1060 INPUT"NOME DO EIXO-Y ";YS
EN LET mK-2_^___^__^M 1070 Y$-LEFTS(YS,9) IFJS-" "THEN :

3440 INK ínk YS-"EIXO-Y"


3450 FOR m-1 TO (a(n)*ft) STEP 1080 PRINT INPUT"NÚMERO DE BARR
:

SGN a<n) AS; ";NBÍ


3460 PLOT 56+ (n-1) *wd*8 cm: DRA
, 1090 IFNBl>65THEN1080
W wd-S-2.0 1100 DIMVA (NBI PRINT PRINT ) : :

3470 LET cm-cm+SCN a(n) 1110 FORI-1TONBÍ


34B0 NEXT m ^^^^^^^H 1120 PRTNT"VALOR DA BARRA " T : ; :

3490 NEXT n INPUTVA(I)


3500 IF INKEYSO"" THEN GOTO 3 1130 NEXT:GOTO10
5 APLICAÇÕES 5

2260 PBESET ( 0 , Y) : PRINTf 1 TAB


, (4) DE B ABBAS VER / EDITAR DADOS, F
, 1070 IF NBt > 65 THEN 1060
-0" IM DE PROGRAMA 10B0 DIM VA (NBt
2270 CLOSE 30 VTAB 3: HTAB 8: PRINT "M E 1090 PRINT PRINT :

2280 IFINKEYS-""THEN22B0 NU PRINCIPAL" 1100 FOR I - 1 TO NBt


2290 SCREEN0:GOTO10 40 FOR I - 1 TO 4 1110 PRINT "VALOR DA BARRA ";I
3000 IFNBt-OTHENIO 50 READ MS T INPUT VA(I)
:

30Í0 CLS:LOCATE10:PRINT"MODULO 60 HTAB 10: VTAB 2 * I + B: PR 1120 NEXT GOTO 10:

DE EDIÇÃO" INT I ;
MS 2000 IF NBt - 0 THEN 10
3020 PRINT PB I NT "BARBA" "VALOR"
:
.
70 NEXT 2010 GOSUB 110
3030 FORJ-lTONBt PRINT PBINT HTAB 20: PB :
2020 IF SGN (Hl) < > SGN (L
3040 PRINTJ.UA(J) INT "OPCAO 0) THEN HT - ABS (HIÍ + ABS (

3050 IFINT J/17) - J/17THENGOSUB3


{ GET RS IF RS < OR RS :
LO) GOTO 2050
:

090 "4" THEN 90 2030 HT - ABS SGN (Hl) - 1) ( (

3060 NEXT 100 ON VAL (BS) GOTO 1000.200 * ABS (Hl) + SGN (LO) - - (

3070 GOSUB3090 0 3000 ,4000


,
1) * ABS ÍLO))
3080 GOTO10 110 LO - VAU) :HI - VAU) 2040 IF HT - 0 THEN 10
3090 LOCATEO 20 PRINT"Tecle <E>
. : 120 FOR I - 1 TO NBÍ 2050 A - 2 * INT (270 - 2 • N (

para editar ou qualquer outra 130 IF VA{I) > Hl THEN Hl - VA Bt) / NBt / 2) :S - 2:ES - 150 /
tecla para continuar"; (D HT
3100 RS-INKEYS:1FHS-""THEN3100 140 IF VA(I) < LO THEN LO - VA 2060 IF A > 15 THEN A - 15
3110 IFRSO"E"THENL0CATE0 3 FOR . :
(D 2070 IF LO > - 0 THEN Y - 155
H-lTOl9:PBINTSPC(40) :NEXT LOCAT : 150 NEXT BETURN :
: GOTO 2100
EO. 3 RETURN
:
1000 HOME IF NBt < > 0 THEN
:
2060 IF Hl < - 0 THEN Y - 5:
3120 LOCATEO PRINTSPC . 20 : ( 79) ; LO VTAB 15: PBINT TAB 10) "CONF (
GOTO 2100
CATE0 20 INPUT"Qual barra ";B
. : IRMA? (S/N)";: GET RS: IF RS < 2090 Y - INT (76 + ABS (Hl) (

3130 LOCATEO, 21 :INPUT"Novo valo > "S" THEN 10 - ABS (LO) * ES / 2)


)

r ";VA(B) 1010 HOME PRINT TAB 10)"EN


: ( 2100 HGR HCOLOR- 7:P - 4
:

3140 I-B:GOSUB150 TRADA DE DADOS" 2110 HPLOT 2,0 TO 2.158: HPLOT


3150 GOTO3090 1020 CLEAR VTAB 4: INPUT "NO
:
0.Y TO 279.Y
4000 CLS: LOCATE7 14 INPUT*FIM D , : ME DO EIXO 'X' * ;X$ :
2120 HCOLOB- 5
E PROGRAMA (S/H) " ;RS 1030 XS - LEFTS (XS,5): IF XS 2130 FOR I - 1 TO NBt
4010 IFRS<>"S"THEN10 - "" THEN XS - "EIXO-X"
2140 FOR J - 1 TO A
1040 INPUT "NOME DO EIXO 'Y': 2150 HPLOT J + P.Y - SGN (VAI
" YS *
I)) TO J + P, INT (Y - (VA(I)
HE] - ""
I

1050 YS - LEFTS (YS,5): IF YS


THEN YS " "EIXO-Y"
ES)) +1
2160 NEXT :P - P + S + A: NEXT
1060 PRINT INPUT "NUMERO DE
:

BARRAS " NBt : ;


2170 VTAB 21: HTAB 1: PRINT XS
TAB 34) ;YS
; (
"
2180 VTAB 22: HTAB 10: PBINT "
VAL MAX-";HI;: HTAB 25: PBINT
VAL MIN-";LO
2190 PBINT TAB { 5) " PBESSIONE I

QUALQUER TECLA PARA SAIR";


2200 GET BS: TEXT GOTO 10 :

3000 IF NBt " 0 THEN GOTO 10


3010 HOME PBINT TAB 10) "MO
: (

DULO DE EDICAO" ,

3020 PBINT PRINT "BABRA* "VA :

LOB"
3030 FOR J - 1 TO NBt
3040 PRINT J,VA(J)
3050 IF PEEK (37) - 20 THEN
GOSUB 3090
3060 NEXT
3070 GOSUB 3090
3080 GOTO 10
3090 VTAB 21: HTAB 1: PRINT "T
ECLE <E> PARA EDITAR OU OU AL QUE
R OUTRA TECLA PARA CONTINUAR
";: GET RS: IF RS < > "E" THEN
VTAB 4: HTAB 1: CALL - 958:
ÍIETUBN
'•'3100 VTAB 21: HTAB 1; CALL M-
958: INPUT "QUAL BABRA? ";B
3110 INPUT "NOVO VALOB? ";VA(B
>

3120 I - B: GOSUB 110


3130 OOTO 3090
4000 HOME VTAB 15: HTAB 10:
:

PRINT "FIM DE PROGRAMA? "j: GET


RS: IF RS < > "S" TKEN 10
IIIIIIIIIIMHHHHBHMMHHIIIIIIIII III

Entre os vários recursos gráficos

do MSX, o sprite destaca-se


por servir de base ao funcionamento

da maioria dos jogos de ação.


Veja como é fácil usá-lo.

Um sprite é um tipo especial de carac-


lere gráfico definido pelo usuário, dese-
nhado em extremamen-
alia resolução e
te fácil de movimentar. Alguns exemplos
de seu uso já foram vistos em artigos an-
teriores. Além da mobilidade, o sprite
tem outras características especiais, tais
como a possibilidade de definir e movi-
mentar mais de um sprite e de indicar se
houve colisão na tela —
ou seja, se dois
sprites coincidiram no mesmo ponto.
Não surpreende, portanto, que os spri-
tes estejam presentes na maioria dos pro-
gramas de jogos. Mas são, também, uti-
lizados em
qualquer tipo de programa
que necessite de figuras móveis em alta
resolução —
por exemplo, programas fi-
nanceiros que empreguem um "ícone"
(símbolo apontando para as opções).

DEFINIÇÃO OE UM SPRITE

O desenho de um sprite é definido


informando-se ao computador quais
pontos devem ser "acesos" e quais de-
vem ser "apagados", para que sc obte-
nha o padrão desejado. Existem dois ta-
manhos de sprite: pequeno (8x8 pontos)
e grande (16x16). No decorrer deste ar-
tigo, trataremos apenas dos sprites gran-
des, salvo menção em contrário.
Um sprite grande é formado por de-
zesseis linhasde dezesseis pontos cada.
Em vez de se definir, ponto por ponto,
quais serão acesos ou apagados,
reúnem-se cada oito pontos em um gru-
po. Assim, a informação sobre o padrão
de uma linha tio sprite é armazenada em
dois grupos de oito pontos cada.
Atrtbuindo-se o algarismo "1" para os
pomos acesos e "0" para os apagados,
cada grupo de oito pontos se transfor-
mará em um número binário (byte de 8
bits) que, convertido para a forma de-
cimal, dará origem a um número entre A ordem dos byte no sprite e a se ... sendo que os bytes foram numerados

0 e 255. Cada sprite, portanto, é forma- guinte: na ordem em que aparecerão na linha
do por 32 grupos de oito pontos, 32 nú- DATA.
meros binários de oito dígitos (8 bits ou Linha I: BYTE 1 BYTE 17 Uma orientação para o cálculo des-
1 byte) ou, simplesmente, 32 números. Linha 2: BYTE 2 BYTE 18 tes valores, uma vez definido o padrão
Estes números são agrupados em uma li- Linha 3: BYTE 3 BYTE 19 gráfico para o sprite, é dada na figura
nha DATA, ordenados como descrito da página 190. Por meio do exemplo,
adiante. Calculam-se da mesma maneira ... e assim por diante até que: você terá uma ideia de como obter o va-
os valores para sprites pequenos, já que lor decimal correspondente a um gru-
Ieles são formados por oito linhas de oi- Linha 15: BYTE 15 BYTE 31 po de oito pontos. Se todos os pontos
to pontos cada, dando origem a 8 bytes. Linha 16: BYTE 16 BYTE 32 estiverem- acesos, o valor decimal será
IIIIIIIIIIIIHM llllllll
0 QUE E UM SPRITE? UM PROGRAMA PARA CRIAR
APLICAÇÕES SPRITES
COMO DEFINIR 0 USO DOS SPRITES
E MOVIMENTAR SPRITES "TIROAO PÁSSARO":
PRIMEIROS PASSOS CONTROLE DE COLISÕES

Para a definição de um sprite em BA-


SIC, devem-sc colocar os valores já cal-
Exereite-se um pouco. Comece dese- culados dentro de uma cadeia alfanumé-
nhando o padrão da figura desejada em rica. Em nosso exemplo, isso é feito pe-
papel quadriculado. Deli- lo laço FOR. ..NEXT das linhas 20, 30
uma área de dezes-
mite e 40. Note que dentro de uma cadeia não
seis por dezesseis qua- se colocam números e, sim, caracteres
drinhos e indique as posi- cujos códigos ASCII correspondam aos
ções dos bytes. Na figura da números desejados. Observe a linha 30.
página 190, por exemplo, Ela lê os dados da linha DATA
e os co-
definimos um sprite que loca na variável AS, usando a função
epresenta uma nave espacial. CHRS (A), que define o caractere cujo
Ao lado da figura, temos o va- código está na variável A.
lor de cada byte em decimal. O A definição propriamente dita do
primeiro byte da primeira linha tem sprite é feita na linha 50, pelo comando
todos os seus pontos apagados, exce- SPRITES (0) AS. O número 0 é o nú-
o último, cujo valor podemos encon- mero do sprite (no MSX podemos ter
ir no alto da figura. Como só há um sprites numerados de 0 a 9). Observe que
ponto aceso, seu valor é o valor total do na linha 10 escolhemos a tela de alta re-
byte: 1. Na segunda linha temos o se- solução, pois a de texto de 40 colunas
gundo byte (veja a ordem dos bytes no não permite o uso de sprites. Nessa li-
sprite, já fornecida). O segundo ponto nha encontramos o comando SCREEN
está aceso, bem como o último. Se con- 2.2. Como você já deve saber, o primei-
sultarmos os valores desses pontos no al- ro número corresponde ao formato da
ta da tabela, veremos que o valor do tela (2 para a tela de alta resolução). O
byte 2 é 64 + - 65. Os próximos três
1 segundo número deve ser novo para vo-
bytes têm o mesmo valor. A propósito, cê. Ele estabeleceo tamanho do sprite
uma recomendação prática: após calcu- utilizado: 0-pequeno (8x8), 1-pequeno
lar o valor de um byte, verifique se, no ampliado (16x16, baixa resolução),
resto do sprite, existem outros bytes com 2-grande (16x16) c 3-grande ampliado
o padrão e, portanto, com o (32x32, baixa resolução).
mesmo valor. Agora vamos à linha 6. Para desenhar e movimentar o spri-
0 byte 6 tem o segundo e o sétimo pon- te na tela usamos o comando PUT
tos acesos, o que lhe dá um valor de SPRITE. Não é preciso seguir o sprite
64 + 2 = 66. O valor do byte 7, que apre- apagando posições ja ocupadas: ao de-
senta os pontos 2 e 6 acesos, é senharmos um sprite na nova posição,
64 + 4 = 68. O byte 8, por sua vez, tem a antiga é automaticamente apagada. O
os pontos l, 2, 3, 5 e 8 acesos, resul- formato desse comando é PUT SPRI-
tando num valor de 128 + 64 + 32 + 8 + TE P, (X. V), C, N, onde P é a priori-
1 =233. Calcule os bytes restantes do dade do sprite, X é a coordenada hori-
mesmo modo. Terminado o trabalho, zontal do sprite, variando de -32 (fora
coloque os números obtidos em uma li- da tela, portanto) a 255; Y é a coorde-
nha com instrução DATA. Para definir nada vertical, que varia de -32 a 191, po-
imentar o sprite, digite o progra- dendo ainda assumir os valores 208, que
ma completo: faz com que todos os sprites de menor
128 + 64 + 32 + 16 + 8 + 4 + 2+ 1, ou se- 10 SCREEN 2,2:COLOR 15,4,4 prioridade desapareçam da tela, e 209,
ja, 255 (veja, no alto da figura, o valor 20 FOR 1-1 TO 32 que apaga o sprite na tela; Cea
cor do
pelo qual se deve multiplicar cada pon- 30 READ A: AS-AS+CHRS (A) sprite, e N, o número do sprite.
to). Se todos estiverem apagados, a so- 40 NEXT I Quando dois ou mais sprites ocupa-
50 5PRITES(0)-A$ rem a mesma posição na tela, aparece-
ma dos valores será zero. Entre estes 60 FOB 1-210 TO -20 STEP -.5
dois extremos haverá um único valor pa- rá apenas o que estiver "na frente", ou
70 PUT SPRITE 1,(1,1), 10,0
ra cada permutação possível de pontos seja, aquele que tiver o número de prio-
80 NEXT I
acesos e apagados. Cada valor obtido ridade menor. Isso permite dar aos seus
100 DATA 1,65,65,65,65,66,68,
pode ser usado na definição do sprite, 233.169,191.175,163,227.3,15,17 jogos efeitos tridimensionais. Os carros
desde que colocado em uma iinha DA- .0,4,4,4.4.132,68,46.42,250,234 passam atrás dos postes, e ursos se es- i

TA, na ordem já especificada. ,138,142. 128, 224.16 condem atrás de árvores, por exemplo. |
; ;

mu
300 REH 1234567890123456
301 DATA"
VALORES DOS PONTOS NÚMEROS DA |\a figura ao lado — um 302 DATA"
LINHA DATA sprite representando uma 303 DATA"
nave espacial os — , 304 DATA"
números das linhas e os 305 DATA"
1 O valores dos ponlns estão 306 DATA"
65 4 indicados cm suas 30 7 DATA"
65 4 respectivas posições, para 308 DATA"
65 4 facilitar o acompanhamento 309 DATA"
65 4 dos cálculos. 310 DATA"
66 132 Veja eomo os 311 DATA"
6B 6B valores são somados, para 312 DATA"
233 46 dar origem aos números da 313 DATA"
169 42 linha DATA, mostrados a 314 DATA"
"
191 250 direita. Há dois números 315 DATA" /
175 234 para cada linha, 316 DATA"
163 13B representando dois bytea
227 142 com oito pontos cada. O Rode o programa, tal como ele está,

calculo desses valores pode


para verificar se houve algum erro de di-
3 1 28

15 224 ser leito manualmente ou gitação. Ao fazê-lo, responda N à per-


17 li, com o uso de um programa. gunta da linha 30.
Para usar o programa, digite LIST
300-, Isso fará com que as dezesseis li-
nhas DATAvazias do final da listagem
UM PROGRAMA PARA CRIAR SPRITES Z(1,Z)-Z(1,Z)+A(ZZ) surjam na leia. Desenhe dentro delas o
90 NEXT ZZ:FOR ZZ-9 TO 16 padrão do seu sprite. Cada uma das de-
95 IF MIDS(A$(Z) ,ZZ.l)-"*" THEN zesseis posições das linhas, entre as as-
A
larefa mais aborrecida, ao se tra-
Z(2,Z)-Z(2,Z)+A(ZZ)
balhar com sprites. consiste em calcu- pas, reprcsenla um ponto. Use apenas
100 NEXT ZZ.Z os controles de movimentação do cur-
lar os 32 números que serão colocados 110 CLS:IF PH$-"S" THEN OPEN "L
na linha DATA. Em vez de fazê-to ma- sor e a barra de espaço, colocando um
PT:" FOR OUTPUT AS ll ELSE OPEN
nualmente, use um programa que tra- "CRT * FOR OUTPUT AS |1
: asterisco nas posições que deseja acen-
balhe por você. 120 PRINT tl, "Linha DATA "; der. Evite usar 1!NS e DEL, que alteram
Este deverá, em primeiro lugar, per- 130 FOR Z-l TO 16 o número de posições entre as aspas.
mitir a utilização dos recursos de edição 132 PRINT il.ZU ,Z) " ; ;
Não deixe dc apertar RETURN
em ca-
e movimentação do cursor do pa- MSX 134 NEXT Z da uma das dezesseis linhas DATA; ca-
ra desenhar a figura do sprite na tela.
136 FOR Z-l TO 16 so contrário, o MSX
não se lembrará
138 PRINT #1,Z(2,Z) IF Z<16 TH ; :
delas. Orienle-se pelos números da linha
Em seguida, precisará calcular os valo- EN PRINT il " " , ,
300, que correspondem às posições ho-
;

res correspondentes que serão incluídos 140 NEXT Z


na Unha da instrução DATA, 145 PRINT ":PRINT #1." * rizontais. Um
desenho típico se encon-
em tra na figura da página ao lado, que re-
possibilitando-lhe usar o sprite seus 150 IF PRS-"S" THEN GOTO 170
programas. 155 PRINT *1. "Aperte RETURN par presenta um pássaro voando.
O programa seguinte foi preparado Quando completar seu desenho, apa-
para efetuar todas essas coisas, ofere- gue a teia e liste as últimas linhas para
cendo ainda a opção de produzir uma conferir. Rode o programa. O
compu-
60 tador lhe dará. entào, a opção de cópia
cópia impressa, caso você tenha uma im-
170 SCREEN 1,3: COLOR 14,5.5 impressa. Responda N e veja o resulta-
pressora. A
tarefa de digitá-lo e gravá- 172 VPOKE BASE(6)+15,68
lo em uma fita cassete é compensado- 174 VPOXE BASE(6)+5,69
do na tela.

ra, pois facilita muito a posterior cria- 176 PRINT tl.TAB(S) "DESENHO DO :
Primeiro, surgem os 32 números das
ção de sprites. SPRITE" linhas DATA. Um
desenho ampliado de
178 PRINT ":PRINT #1," "
5 SCREEN 0:KE-Y OFF 180 PRINT 11. TAB[5) ="1234567890
10 Dl M ASC16) ,Z(2,16) ,AU6) 123456"
20 CLS: PRINT TAB (10) "EDITOR DE ;
190 FOR Z-l TO 16
SPRITES" 195 PRINT ll ,TAB(5)
30 PRINT PRINT TAB (8)
: INPUT "C ; : 200 FOR ZZ-1 TO 16
dPIA IMPRESSA (S/N) ";I$:IF IS- 205 IF MIDS(ASÍZ) ,ZZ, 1)-""" THE
"S" THEN PR$-"S" N PRINT H.CHRSU20) ELSE PRIN r

40 IF ISO"S" AND ISO"N" THEN T II " "


, .

PLANEJAMENTO DE SPRITES
GOTO 20 210 NEXT ZZrPRINT 11," ";Z um modo muito prático
Existe de
50 PRINT PRINT TAB 15 ); "Aguarde
: ( 220 NEXT Z:IF PRS-"S" THEN CLOS usar o programa de criação de sprites.
E END
:
Desenhe seu sprite em papel quadricu-
60 FOR Z-l TO 6 230 FOR Z-l TO 16 lado com tamanho correspondente ao
62 READ A(Z) :A(Z+8)-A(Z) 240 A$-A$+CHR$(ZU.Z)) das linhas DATA do final da listagem.
64 NEXT 250 B$-BS+CHRS(Z(2.Z>) Pregue-o com fita adesiva na tela de
66 DATA 128,64,32,16,8,4,2,1 260 NEXT:SPRITES(0)-AS+B5 sua TV. Em seguida, simplesmente use
70 FOR Z-l TO 16 270 FOR Z-190 TO 5 STEP -5 os controles do cursor para desenhar
75 READ A$(Z) 275 PUT SPRITE0, (10, Z) ,1 asteriscos nas posições dos quadrinhos
I 80 FOR ZZ-1 TO 8 280 NEXT
I 85 IF MIDS(AS(Z) ,ZZ, !)•"*" THEN 290 IF PR$<>"S" THEN GOTO 290
;

Illllllll
seu sprite é mostrado a seguir, TO 50
apertando-se a tecla RETURN. As te- 45 IF RS-CHBS(28) THEN XX-2:GOT
clas CTRL e STOP, pressionadas ao
O 50
50 FOR Z-l TO 10
mesmo lempo, interrompem o progra- 52 X-X+XX:IF X>255 THEN X-0
ma. Caso tenha uma impressora e dese- 55 IF X<-32 THEN X-255
je uma cópia impressa, rode o progra- 60 IF A-l AND Y>-32 THEN Y-Y-2
ma novamente e responda S à pergunta 65 IF A-2 AND Y<190 THEN Y-Y+2 COMO EDITAR UMA LINHA DATA
da linha 30. O resultado será enviado à 70 PUT SPRITE 0,(X.Y),15 Para evitar o trabalho de digitar a li-
impressora, e não ã tela. Algumas im- 75 NEXT Z:GOTO 30 nha DATA criada pelo programa, taça
pressoras requerem um ajuste no núme- 100 DATA 128,192,176.72,116,84. o seguinte: assim que o computador
ro máximo de caracteres por linha (use
50,42,41,37,26,4,56,199,98,28,7 fornecer os números, pare o programa
,30.42,84.84,168.168,208.160,24 usando CTRL + STOP. Movimente o
quarenta).
8,4.34,222,33.144,72 cursor até o topo da tela, onde se en-
Para o exemplo da figura do pássa-
ro, o resultado c o seguinte: contra a linha DATA. Usando DEL, apa
O sprite é desenhado na tela de tex- gue a palavra "Linha" e, usando INS.
tos de 32 colunas e pode ser movimen- escreva o número da linha DATA no
Linha DATA 128 192 , , 176 . 7
2 116 . 84 50 42 , , , . 41 , 3 tado pelas teclas de controle do cursor. programa que está preparando. A se-
7 26 ,4 56 199 , . , , 98 . 28 Para usar qualquer outro sprite, basta guir, aperte RETURN O efeito será
. 7 . 30 . 42 , 84 . 84 , 168 mudar a linha 100. idêntico ao da digitação de todos aque-
, 168 208 . , 160 . 248 , 4 . 3 O laço contido nas linhas 20, 21 e 22 les números.
4 , 222 33 , , 144 , 72 lèos valores da linha 100 e os coloca na Este método pode ser usado para
colocar a mesma linha em programas
variável A$. A linha 25 define o sprite
DESENHO DO SPRITE jáexistentes em fita. Carregue o pro
atribuindo-lhe o número 0. As linhas de
grama sem apagar a linha DATA da ta
30 a 75 movimentam o sprite conforme bela. O programa carregado apaga a
a tecla pressionada. memória, mas não apaga a tela. Movi-
1234567890123456
mente o cursor até a linha DATA. mo
difique seu número, se necessário, e
aperte RETURN
Outro recurso interessante dos spri-
tes é a indicação da ocorrência de coli- Este é um pequeno jogo de "tiro ao
são entre dois deles, em sua movimen- pássaro", extremamente simples, mas
tação peia tela. Para entender como is- útilà nossa finalidade. Não explicare-
so é feito, apague a linha 32 do último mos seu funcionamento enquanto jogo.
programa e acrescente: restringindo-nos apenas ao controle de

20 SPRITE ON FOR 1-1 TO 40


Para que possamos trabalhar com co-
!

22 NEXT I:TIME-0:S-0
lisões de sprites, devemos "habilitar" o
23 SPRITES(0)-LEFTS(AS,32)
24 SPRITESU)-RIGHTS(AS,8) programa a reconhecer tal ocorrência,
25 X-90:Y-X:XX-100:YY-XX por meio da instrução SPRITE ON, na
30 FOR Z-l TO 5:LOCATE 0,0 linha 20. Uma vez feita a habilitação,
O mesmo programa pode ser utiliza- 31 PRINT "TEMPO: " ; TIME devemos usar a instrução ON SPRITE
35 A-INT(RND(1)*3)+1:X-X+10 GOSUB, que desvia o programa para
do para sprites pequenos. Para tanto,
desenhe seu padrão utilizando apenas
36 IF X>255 THEN X 30 — uma sub-rotina sempre que quisermos
40 IF A-l AND Y>-30 THEN Y-Y-10 verificar se houve uma colisão de spri-
os oito primeiros bytes, ou seja, no qua- 45 IF A-2 AND Y<250 THEN Y-Y+10
drante superior esquerdo do conjunto de tes. Nesta sub rotina pode estar progra
50 PUT SPHITE l.(X.Y),15,0
linhas DATA. Considere apenas os pri- 52 ZS-INKEYS:IF 2$-"" THEN GOTO
mado um efeito visual ou sonoro de ex
meiros oito números calculados. 52 plosào, por exemplo. Em nosso progra-
53 IF ZS-CHRS [ 29) AND XX>-30 TH ma, tal comando ocorre na linha 72. Ca
EN XX-XX-5 so haja colisão entre o pássaro e a "mi
55 IF ZS-CHRS (28) AND XX<250 TH ra", o controle c transferido para a sub-
EN XX-XX+5 rotina 1000, que incrementa o escore e
60 IF ZS-CHRS (30) AND YY>-30 TH faz com que o pássaro caia. Durante a
O programa seguinte desenha e mo- EN YY-YY-5
vimenta o sprite do pássaro, que acaba- execução da sub-rotina, o programa é
65 IF ZS-CHRSOD AND YY<190 TH
desabilitado pela instrução SPRITE
mos de calcular. EN YY-YY+5
10 SCREEN 1,2: COLOR 15.4,4 70 PUT SPRITE 0, (XX, YY) .10.1 OFF na linha 1000. Esse é um procedi-
20 FOR 1-1 TO 32 72 ON SPRITE GOSUB 1000 mento usual e quase sempre necessário,
21 READ A:AS"AS+CHRS(A) 75 LOCATE 20,0: PRINT "SCORE: "i e não há uma explicação simples para
22 NEXT I :TIME-0 S ele. Retire este comando, bem como o
23 SPRITES (0) -AS 76 NEXT Z:IF TIME<5000 THEN 30 de habilitação da linha 1030, e veja co-
25 X-90:Y-X:GOTO 50 80 PRINT PRINT "O Tempo acabou
:
mo ocorrem erros no escore.
KS-INKEYS:A-0:XX-0 " END
Existe ainda a instrução SPRITE
!
30 :

31 IF KS-"" THEN GOTO 30 110 DATA 8.8,62,8,8,0.0,0 STOP, que não desabilita o programa
32 IF KS-CHRS(30) THEN A-l: GOTO 1000 SPRITE 0FF:S-S+1
1010 FOR I-Y TO 191 mas adia qualquer desvio, guardando a
50
THEN A-2:GOTO 1020 PUT SPRITE 1,(X,I),15,0 ocorrência de colisões na memória. Só
35 IF KS-CHRS(31)
50 1030 NEXT I:SPRITE ON haverá o desvio após a ocorrência de um
40 IF KS-CHRSÍ29) THEN XX--2:GO 1040 X —
30 RETUBN : SPRITE ON no programa.
IIIIIIIIIIIUI

Os conjuntos constituem um recurso


CONJUNTOS CAIXAS : muito eficaz para armazenar e
processar listas de qualquer natureza:

DE INFORMAÇÃO nomes, datas, as mais diversas


estatísticas. Aprenda a utilizá-los.

Os conjuntos são uma forma de re- um item dos demais, acrescenta-se sim-
presentação de dados em programa BA- plesmente um número (ou. às vezes, uma
SIC, constituindo método mais adequa- expressão aritmética) entre parênteses, Use um A maiúsc
do para se programar a manipulação de logo após o nome da variável. O primei- da linha ZX-81.
informações inter-relacionadas — por ro elemento é chamado de A(l), o se-
exemplo, listas dos membros de um clu- gundo de A(2), o terceiro de AC3) e as- 10 DIM a(4)
be, com seus respectivos endereços e ins- sim por diante.
crições, registros financeiros ou, então, O conjunto não apenas torna o sis- A declaração DIM acima informa ao
listas de personagens, armas e tesouros tema de armazenagem mais compacto, computador que o conjunto A terá qua-
para um jogo de aventuras. como também facilita grandemente a tro elementos, ou variáveis. Nos com-
O comando LET, que você já conhe- programação da entrada, modificação putadores Apple, TRS-Color e MSX
ce, poderia ser utilizado para atribuir va- e listagem dos dados nele contidos. eles são numerados de AIO) a A(3). Nos
lores como esses a uma série de variá- micros da linha Sinclair, que não acei-
veis. No entanto, para listas muito lon- tam o elemento A(0), eles são numera-
gas, ele é bastante ineficiente, pois to- COMO DIMENSIONAR UM CONJUNTO dos de AH) a A<4>.
ma muito tempo de digitação, O número de elementos que se vai di-
O conjunto simplifica o trabalho, ar- Antes de utilizar um conjunto em mensionar pode ser tão grande quanto
mazenando a informação de uma for- BASIC, é necessário declarar ao com- se queira (milhares, por exemplo), des-
ma mais compacta. Em vez de uma va- putador o tamanho (númerode elemen- de que caiba na memória RAM
do com-
para cada item da infor-
riável diferente tos)que ele o terá. Assim, o computa- putador, é claro. Na verdade, não è
mação, utiliza-se uma variável com o dor poderá reservar espaço suficiente na obrigatório dimensionar o número exa-
mesmo nome para todos os itens o— memória. Isto é feito mediante a decla- lo de elementos que se utilizarão: para
A, por exemplo. E, para se diferenciar ração DIM (de "dimensão"), como se ter a garantia de que o espaço será sufi-
vè a seguir: ciente, reserve um pouco mais. Mas te-
nha em mente que o espaço de memó-
ria reservado com um DIM não poderá
IIIIIIIIIHHI IHIIIIIIIIIII

DEFINIÇÃO E UTILIZAÇÃO ATRIBUIÇÃO DE VALORES


nc UM
Ub hi pr>M iiimth
LUNJUN
i fí
U1
f HM IMTflí
LUINJUpJ
II
1
MDMFÇ
n F IMUIVICO
Uo UC
COMO DIMENSIONAR UTILIZAÇÃO DOS DADOS
UM CONJUNTO: EM UM CONJUNTO
A DECLARAÇÃO DIM ANÁLISE DAS INFORMAÇÕES

ser ocupado por outras variáveis. Por is-


so, não dimensione exageradamente, ou
receberá uma mensagem de "'estouro de 20 LET A(l)-0
memória" (oul of memory). 30 LET A(2)-2
40 LET A(3)-10
50 LET A(4) -20
ATRIBUIÇÃO DE VALORES
Até agora, nào houve economia de
passo seguinte consiste em atribuir
O tempo ou dc espado na memória. Ao con- 30 INPUT a(l) ,al2) ,al3) ,a(4)
os valores para cada elemento. Se, por bem mais rápido utilizar
trário, teria sido

exemplo, as variáveis representassem as um simples comando LET. Mas veja em


locações da tela nas quais se imprimiria seguida o que acontece quando è neces-
um texto ou um gráfico, a próxima li- sário armazenar valores que são diferen-
10 dim AtU
nha seria mais ou menos isto: tes, cada vc* que se roda o programa:
20 PRINT "QUAIS SAO
OS VALORtS?"

10 DIM A(3)
IIIIIIIIIIHHH lllllllll!
números. O dimensionamento do con- temporada de corridas. Não será impro-
junto específico para nomes é assim: vável que precise entrar algumas deze-
nas de curvas, ou até mais, dependen-
do do caso. Mas o princípio é o mesmo
1 é que o utilizado no programa a seguir,
10 DIM AS (5) com apenas seis nomes. Este programa
faz com que o computador leia a série
Nos micros da linha Sinclair {ZX-81 de nomes de curvas do autódromo de
e Spectrum) é necessário ainda especifi- Jacarepaguá, armazenados em declara-
car o comprimento máximo que a cadeia ções DATA (os micros da linha ZX-81
alfanumérica poderá ter. Assim, se o não dispõem desse recurso):
maior nome da lista tiver dez caracteres,
os conjuntos de nomes serão dimensio-
nados da seguinte maneira:
ú
10 DIM A3(5)
20 FOR N-0 TO 5
30 P.EAD AS(N>
40 NEXT N
No ZX-81 digite em letras maiúsculas.
50 DATA NORTE. NONATO, PACE
30 INPUT A(l> 60 DATA UM, VITORIA, LAGOA
10 DIM aS(6,10)
40 INPUT A(2)
50 INPUT A[3) Em cada caso o computador reservou
60 INPUT A(4)
espaço na memória para seis cadeias al-
fanuméricas (nomes, rótulos, etc). Pa- 10 DIM a$(6,ll)
O
computador pedirá o valor de ca- ra definir o laço de entrada desses no- 20 FOR n-1 TO 6
da variável, sempre que você rodar o 30 READ aSín)
mes, digile:
programa. Bastará, então, digitar um 40 NEXT n
número (seguido por <ENTER> ou
<RETURN>) quando o computador
solicitar.
Assim, na medida em que o programa
í «
20 FOR N-0 TO 5
MQQ 50 DATA"NORTE" "NONATO" "PACE*
.

60 DATA-UM", "VITORIA". "LAGOA"

Os nomes são
,

lidos nas declarações


tiver um número maior de elementos, o 30 INPUT AS(N) DATA na linha 50 e armazenados em
tempo economizado passará a compen- 40 NEXT N
sar o trabalho inicial. Suponha, por
exemplo, que você queira entrar uma
centena de números. Um
programa bem
simples será o suficiente:

imas
20 FOR n-1 TO 6
30 INPUT aS tn)
40 NEXT n

Rode o programa e entre os nomes


10 DIU A (99) à medida que forem pedidos na tela,
20 FOR N-0 TO 99 seguindo-os por <ENTER>
ou <RE-
30 INPUT A (N) TURN > Se você quiser verificar, logo
.

40 NEXT N
após digitar cada nome, se o armazena-
mento foi correto, adicione esta linha ao
programa acima e rode-o novamente:
um conjunto, na linha 10. Assim, cada
No ZX-81 digite em letras maiúsculas. vez que o programa é rodado, os mes-
mos nomes entram automaticamente.
10 DI m a(100) No caso de existirem cem nomes, em vez
20 F0B n-1 TO 100 35 PP.INT AS(N) de seis, modifique a linha 10 para DIM
30 INPUT a(n) A$(99) e a linha 20 para FOR N = 0
40 NEXT n
lo 99 (para os micros Apple, TRS-80,
TRS-Color e MSX), ou DIM A$ (100,
CONJUNTO DE NOMES 35 PRINT aS(n> 11) e FOR N = 1 TO 100 (para o Spec-
trum). Em seguida, você poderá acres-
O
tipo de conjunto descrito até aqui Não é difícil digitar seis nomes, mes- centar os 94 nomes restantes às decla-
rações DATA, a partir da linha 50.
permite apenas o armazenamento de nú- mo que sejam longos. E, ainda que o
meros. Mas também é possível utilizar número de nomes chegue a cem, o tra-
O próximo passo será a definição do
conjuntos para armazenar cadeias alfa- conjunto que conterá o número de aci-
balho será rápido. Imagine, por exem-
numéricas. dentes em cada curva.
plo, que você esteja realizando uma pes-
Se você quiser processar tanto nomes quisa sobre o campeonato de Fórmula
quanto números, por exemplo, precisa- 1 e deseja armazenar os nomes das cur-

rá definir dois conjuntos separadamen- vas e o número de batidas que ocorre-


te: um para os nomes e oucro para os ram em cada uma delas durante uma 60 DIM A (5)
, ! —
IIIIIIIHHI IHIIIIIIIIIII
70 FOR N-0 TO
80 READ A (N)
90 NEXT N
5
mmâB
300 CLS 400 FOR n-1 TO 6
100 DATA 0.2.5,1,3,6 310 LET TL-0 410 IF a(n)>3 THEN PRINT aS(n
320 FOR N-0 TO 5 ) .a(n)
330 LET TL-TL+A<N) 420 NEXT n
340 NEXT N
350 PRINT "NUMERO TOTAL DE ACTD Esta parte do programa mostra na te-
60 DIM a (6) ENTES " TL ;
la uma lista das curvas nas quais ocor-
70 FOR n=l TO 6
reram mais de três acidentes. Em nosso
80 READ a(n)
90 NEXT n exemplo de seis nomes, elas são as cur-
100 DATA 0,2.5,1.3.6 vas PACE e LAGOA. Sc você substituir
Substitua no programa anterior o co- o número 3 pelo 5, na linha 410, e ro-
É possível ignorar o elemento zero de mando CLS por HOME, na linha 300. dar o programa, apenas LAGOA será
um conjunto, nos computadores Apple, impresso. Para qualquer número maior
MSX, TRS-80 e TRS-Color, se for mais do que 6 —nesse caso, o maior valor
conveniente. Assim, no último exemplo, nada será impresso.
podemos definir DIM AS (6) e numerar 300 CLS A informação armazenada nos con-
os itens de 1 a 6. Isso significa que 310 LET total-0 juntos poderia ser, para dar um segun-
AS(0) fica vazio, pois é mais usual con- 320 FOR n-1 TO 6 do exemplo, uma lista de famílias de
do que 330 LET total-tot, uma cidade, juntamente com estatísti-
tar a partir do 1 0.
340 NEXT n
cas como o número de crianças, os ren-
350 PRINT "Numero
dimentos mensais e o número de carros.
UTILIZAÇÃO DOS CONJUNTOS dentes: ";total
Uma vez que esses elementos tenham
sido entrados, eles poderão ser classifi-
Agora o computador já "sabe" cados em grupos e analisados de inúme-
ANALISE DA INFORMAÇÃO
quantos acidentes ocorreram em cada ras maneiras. Por exemplo, suponha
curva. Mas como essa informação po- Imagine o quanto o programa acima que queiramos listar os dados de todas
de ser manipulada? cem curvas, em as famílias com sobrenome começando
seria útil se existissem
Provavelmente, você gostaria que, com P. Para ter uma ideia de como isso
vez de apenas seis.
antes de mais nada, o computador im- funciona, acrescente estas linhas ao
E. levando em conta que a informa-
primisse uma lista com todas as curvas programa:
ção não apenas pode ser facilmente ar-
e o número dos acidentes registrados em
— mazenada em um conjunto, como tam-
cada uma somente para checar se os
com mesma
bém pode ser analisada a
dados foram digitados corretamente.
facilidade, você entenderá por que os
Adicione as linhas seguintes ao progra-
conjuntos constituem um instrumento 600 FORN-0TO5
ma e rode-o de novo. tão poderoso —
para qualquer coisa, 620 IFLEFTS(ASÍN) , 1 )
-
"
P
"THENPRI
desde orçamento doméstico até finanças NTAS (N)
internacionais. 630 NEXT
Digite estas linhas extras para exami-
210 FOR N-0 TO 5 nar um exemplo de análise:
220 PRINT AS(N) ,A{N)
230 NEXT N
* './< 600 FOR n-1 TO 6
620 IF aSín,l)-"P" THEN
aS(n)
PRINT
400 FOR N-0 TO 5
410 IF A(N)>3 THEN PRINT AS (N) 630 NEXT n
210 FOR n-1 TO 6 MH)
220 PRINT aS(n) ,a(n) 420 NEXT N As linhas 600 e 630 definem um la-
230 NEXT n ço, para examinar cada elemento do
conjunto de nomes. Ã medida que isso
As linhas 210 e 230 percorrem a lis- ocorre, a linha 620 checa o primeiro ca-
ractere. Se ele for P, um nome inteiro
ta,enquanto a linha 220 imprime os no-
mes e os números armazenados nos con- aparecerá.
juntos correspondentes. Se algum erro Nesse caso, a curva chamada PACE
de digitação foi cometido, você terá a será impressa, porque é a única que co-
oportunidade de localizá-lo. meça com P. No exemplo do conjunto
Você pode, também, querer analisar de família, poderíamos escrever uma li-
os resultados contidos nos conjuntos nha do programa que listasse todas as
famílias 'SILVA', todas as que tivessem
Por exemplo, para o levantamento d;
corridas, seria interessante obter respoí mais de um carro, e assim por diante.
tas para questões tais como: "quantas Outra possibilidade é o cruzamento de
colisões ocorreram ao todo?"; "quais informações —
por exemplo, quais as
são as curvas mais seguras?". As linhas pessoas cujos nomes começam por 'A',
adicionais do programa, destinadas a que moram em determinada rua, no nú-
identificar o tota! de acidentes, são as
mero 21, e cujo cachorro é um fila bra- i

sileiro
seguintes:
iiiiiiiiii
TRAI
DO ASSEMBLY
Rápidos e eficientes, os programas dente. Coloque-o no lugar correto, e a Se quisermos utilizar ei

em código de máquina têm, contudo, tradução estará praticamente feita. veremos começar por aprender a tradu-
uma desvantagem: é extremamente di- Há algo mais a ser lembrado. Nos ziros mnemónicos da linguagem As-
fícil escrevê-los e depurá-los. Frequen- computadores das linhas Sinclair, Ap- sembly para códigos hexadecimais.
temente, de fato, eles parecem apenas ple II, TRS-80 e MSX, não se pode es-
uma sequência de números sem sentido, quecer de trocar a ordem dos bytes cons-
pois instruções, dados e endereços são tantes de um endereço de memória, do
lodos especificados como números he- programa, ou de outros dados que pre-
xadecimais. cisam ser representados por dois bytes Contudo, traduzir programas em lin-
A solução não está em deixar de es- (dezesseis bits). Arazão disso é que es- guagem Assembly para código de má-
crever programas em códigos de máqui- sas máquinas armazenam números no quina não é tão fácil quanto parece.
na. A maioria deles é escrita inicialmente formato de byte-baixo/byte-alto. O Mesmo uma instrução simples como
em linguagem Assembly e depois tradu- TRS-Color utiliza um formato inverso, LDA pode ser traduzida para cinco a
zida para código de máquina. Normal- ou seja, de byte-alto/byte-baixo, de mo- quinze códigos de operações diferentes,
mente, isto é feito por um outro progra- do que você poderá deixar os dados ou dependendo da máquina.
ma, chamado Assembler (ou seja, mon- endereços de dezesseis bytes em sua or- Os diversos códigos de operações de-
tador). Porém, se você não dispuser de dem normal. pendem do tipo de endereçamento que

um Assembler ou se quiser aprofun- está sendo utilizado, ou seja, das formas
dar seus conhecimentos — poderá fazer de acesso à memória RAM
que são uti-
essa tradução manualmente e digitar os lizadas pelo microprocessador.
códigos hexadecimais resultantes na me- Veremos a seguir como realizar a tra-
mória do computador, entrando o pro- Os mnemónicos —
assim como os có- dução correta de um programa em lin-
grama monitor ou o inlerpretador BA- digos de máquina em hexa que eles re- guagem Assembly para os vários tipos
SIC (comandos PEEK e POKE). presentam —
servem para manipular o de computador. Na próxima lição,
conteúdo de um registro, definir o va- aprenderemos a montar rotinas muito
lor de um sinalizador ou passar de um úteis em linguagem Assembly.
1 LINGUAGEM ASSEMBLY ponto a outro no programa. Estas são,
basicamente, as únicas coisas que as ins-
Você terá, assim, que aprender a lin- truções em código de máquina são ca-
guagem Assembly, que está longe de ser pazes de realizar. Um
exemplo de mne-
tão difícil quanto os códigos de máqui- mónico é LDA, que significa LoaD Ac- O tipo mais simples de endereçamen-
na. Os mnemónicos, que representam os cumulator (carregar o acumulador). to no ZX-81 é o chamado endereçamen-
códigos de operações da máquina, pra-
ticamente dispensam explicações, pois
são abreviaturas muito claras dos co-
mandos correspondentes (mnemónico
significa que lembra algo). Os dados e
endereços são todos numéricos, assim
como os códigos de máquina. Mas,
usando códigos alfabéticos para escre-
ver os comandos, a sequência pura de
números será rompida, e ficará muito
mais fácil para o programador entender
o programa resultante.
Ao se programar em linguagem As-
sembly, portanto, basta consultar em
uma tabela os códigos mnemónicos re-
ferentes ao microprocessador utilizado
pelo seu computador.
O Sinclair Spectrum, o ZX-81, o
TRS-80 e o MSX empregam o micro-
processador Zilog Z-80, enquanto o
TRS-Color usa o Motorola 6809, e o
Apple II e o TK-2000 utilizam o 6502.
O resultado da consulta à tabela é o có-
digo de operação numérico correspon-
A .

IIIIIIIIIIIHHMMHHMHIHIIIIIIII!
Montar programas em código de máquina LINGUAGEM ASSEMBLY
pode ser um risco para seu equilíbrio CÓDIGOS MNEM Ó NICOS
mental! Uma alternativa mais saudável COMO CONVERTER OS CÓDIGOS
é escrevê-los em Assembly e depois ENDERE ÇA MENTO
traduzi-los para hexadecimal. 1 DESVIOS E USO DE RÓTULOS

to imediato,no qual um valor numéri- reçamento indireto. Este diz à máquina LD A, (IX + 2F)
co é usado como argumento do código onde encontrar o endereço do dado ne-
de operação: cessário. Por exemplo, a instrução: Observe que o deslocamento é de
apenas um byte.
LD A,4 LD A, (HL) Os dados também podem ser trans-
feridos de um registro para outro. Isso
significa: "'carregar (LOAD) o acumu- significa: "carregaro registro A com o é chamado de endereçamento de regis-
lador (A) com o número 4"; essa ins- dado pertencente ao endereço contido tro a registro, cuja instrução correspon-
trução é traduzida para o código 3E04 no par de registros HL". dente é escrita assim:
em linguagem de máquina. Em outras palavras, o microproces-
Já no endereçamento direio é forne- sador examina o registro HL e usa esse LD D,B
cido um endereço onde o dado pode ser número como o endereço da locação de
encontrado, ao invés do próprio dado. memória onde está o byte a ser carrega- que significa: "carregar o conteúdo do
Por exemplo: do no acumulador. registro B no registro D".
Esse comando funciona também na O endereçamento relativo é emprega-
LD A,(0E2D> direção contrária: do apenas com comando de desvio. Ele
diz ao computador quantos bytes este
significa: "carregar o conteúdo da lo- LD (HL), deve saltar para a frente ou para trás.
cação 0K2D no registro A". Isto se tra-
Por exemplo:
duz para 3A 2D OE (observe que os dois significa: "carregar o conteúdo do re-
bytes correspondentes ao endereço fo- gistro A na locação de memória cujo en- JRNZ OFC
ram trocados), dereço se encontra no par de registros
O endereçamento direto também fun- HL". O mnemónico JRNZ (Jump Relati-
ciona de modo inverso: Existe um tipo especial de endereça- ve on Non-Zero) significa: "saltar FC
mento indireto que é chamado de ende- bytes em relação à posição atual. se o
LD 10E2D).A reçamento indexado. Aqui, um dos dois resultado da última operação efetuada
registros de indexação — IX e IY —e for diferente de zero", ou seja, se o si-
significa: "carregar o conteúdo do re- 0 próprio endereço a ser utilizado são nalizador de zero no registro de sinali-
gistro A na locação de memória fornecidos por um valor de deslocamen- zadores (flag register) não for igual a I

0E2D". Isto c traduzido para 32 2D OE to, o qual é acrescentado aos conteúdos O FC diz para onde saltar.
(novamente os dois bytes foram inter- dos registros IX ou IY. FC é -4 em complemento de dois.
cambiados).Um terceiro tipo c o ende- Uma instrução típica poderia ser: Assim, se o sinalizador dc zero não es-
tiver ligado, o microprocessador salla
quatro bytes para trás no programa,
contados a partir do final da instrução
JRNZ OFC, e esta é traduzida para 20
FC em código de máquina. Assim, o mi-
croprocessador salta de fato para a ins-
trução que apareceu dois bytes antes
dela.
Na realidade, raramente o endereça-
mento relativo é utilizado em linguagem
Assembly. Normalmente os saltos são
indicados por rótulos [/abeis). Estas são
palavras inventadas pelo programador,
que cumprem a função de marcadores
— tal como INICIO —
destinados a as-
sinalar o começo de determinadas por-
ções de um programa.
Esse marcador aparece na frente da
instrução para onde será realizado o sal-
to, ou ainda, logo após a instrução de
salto. Por exemplo, a linha inicial po-
deria ser:

INICIO LD A.07
IIIIIIIIIIIIIIIHH^^HBHHHIIIIIIIIIIII

e em algum outro pomo do programa mória 1122". Essa forma também é co- deve-se consultar o código mnemónico
apareceria a instrução de salto: nhecida como endereçamento direto. em Assembly, correspondente à página
A tradução para o LDA com ende- 0X, página 0Y, absoluto X ou absoluto
DJNZ INICIO reçamento absoluto é o código hexade- Y.
cimal AD. No exemplo acima, a instru- Também é possível endereçar indire-

O DJNZ (Decrement and Jump on ção completa é traduzida para AD 2211. tamente uma locação de memória,
Non-Zero) significa: "reduzir de 1 o va- Observe que essa operação tem três utilizando-se o endereçamento indireto.
lor do registro B e saltar para a instru- bytes e que os dois bytes do endereço são Nesta forma, o código de operação é se-
ção logo a seguir, onde o rótulo INICIO trocados de ordem, quando se traduz da guido por um endereço entre parênteses.
no caso de o sinaliza- linguagem Assembly para o Apple. Isso significa que o microprocessador
estiver colocado,
dor de zero não estar ligado". Ao tra- Na página 0 — isto é, de 0000 a OOFF encontrará nesta locação um segundo
duzir manualmente para código de má- — não é preciso especificar o primeiro endereço, o qual será empregado para
quina, você precisará elaborar os saltos byte de endereço, mas deve-se utilizar acessar o dado. Por exemplo:
relativos por sua própria conta. um código de operação especial de pá-
gina 0 (chamado de código de operação JMP (&1530)
de endereço curto), o qual diz ao com-
BM1I putador para olhar para
um byte.
um endereço de significa: salte para oendereço dado na
locação de memória 1530. Mas como
A forma mais simples de endereça- O código de operação para LDA na qualquer locação de memória pode re-
mento no microprocessador 6502 é o en- modalidade de endereçamento de pági- ter apenas um byte, e como são neces-
dereçamento implícito. Na verdade, ele na 0 é A5. Assim, uma instrução como: sários dois bytes para compor um ende-
reço, o microprocessador olha para 1530
não é propriamente um endereçamento.
Por exemplo: LDA &7F e 1531. A primeira locação contém o
byte menos significativo, e a segunda,
CLC será traduzida para A57F. o byte mais significativo, de acordo com
Com o endereço absoluto e o ende- a convenção utilizada para esse micro-
reço de página 0, é possível utilizar o en- processador. Assim, se a locação de me-
significa: "limpar o sinalizador de trans-
porte (Clear Carry Flag)" Não é neces-
.
dereçamento indexado, no qual o con- mória 1530 contém 2F, e a locação de
sário nenhum tipo de endereço como ar- teúdo de um dos registros de indexação memória 1531 contém 13, o micropro-
gumento. A ação é executada no sinali- -X e Y- é acrescentado ao endereço cessador saltará para a locação de me-
zador de transporte, cujo endereço está dado com a instrução, para fornecer um mória 132F.
implícito na instrução. segundo endereço que será utilizado. Existem também duas maneiras de
No endereçamento imediato o dado Por exemplo: indexar endereços indiretos. Com o re-
segue diretamente a instrução. Por gistro X você poderá acrescentar um
exemplo: LDA &1122.X deslocamento ao primeiro endereço (o
endereço fornecido na instrução). O
LDA #&04 Suponha que o conteúdo de registro X procedimento é chamado de endereça-
seja 33. Acrescentando-se 33 a 1122, mento indireto pré-indexado. Alterna-
Essa operação carrega o acumulador obtém-se 155; o acumulador é, então,
1
tivamente, você poderá acrescentar um
com o número 4. O comando LDA é carregado com o dado que se encontra deslocamento do registro Y para o se-
traduzido, na tabela de códigos de ope- na locação de memória 1155. gundo endereço (o endereço nas loca-
rações do 6502, para A9 quando esta Ambosos registros X e V podem ser ções de memória fornecido na instrução
modalidade de endereçamento é utiliza- empregados para indexar tanto o ende- original). Isso é chamado de endereça-
da. Assim, a instrução completa passa reçamento absoluto quanto o de pági- mento indireto pós-indexado.
a ser A904. na 0. Esta é a aparência de instruções des-
Já no endereçamento absoluto, o en- Mas note que, se a soma do conteú- te tipo, em linguagem Assembly:

dereço completo de uma locação de me- do do registro X com o endereço da pá-


mória segue o mnemónico. Por gina 0 for maior do que FF e, em virtu- LDA (&U22.X) e LDA <&1122),Y
exemplo: de disso, cair na página I. o byte mais
significativo será ignorado. No endere- O primeiro código usa o endereça-
LDA & 1122 çamento de página zero, indexado ou mento pré-indexado, e o segundo, o pós-
qualquer outro, o endereço utilizado indexado. Para se consultar os códigos
o acumulador com
significa: "carregar sempre estará na página 0. hexadecimais correspondentes, deve-se
I o dado armazenado na locação de me- Ao usar endereçamento indexado procurar o LDA sob (indireto, X) e (in-
IIIIIIIIIIIHHMHBHHHIHHHHIIIIIIIII

direto),Y. Isso fornecerá Al e BI respec- ta substituiro A, no exemplo acima, pe- registro A para o registro B.
tivamente. Assim, as duas instruções lo endereço de memória cujo conteúdo Para traduzir essa instrução para có-
acima seriam traduzidas para Al 2211 você quer deslocar. Esta locação pode digo de máquina, deve-se consultar o có-
e BI 22 11. ser indexada com o registro X, apenas. digo TFR na seção de endereçamento
As instruções de desvio são saltos A instrução Lem o' seguinte efeito: o imediato da tabela. Isto nos dá o códi-
condicionais. Por exemplo: bit menos significante da memória é ze- go IF. A seguir, o pós-byte é avaliado
rado, o bit mais significante é colocado um nibble (um grupo de quatro bits) de
BEQ no registro indicador de transporte cada vez.
(carryflag), e os bits restantes são des- Em geral, para usar esta instrução
significa: desviar se for igual a (Branch locados uma posição à esquerda. Da com o 6809, atribui-sc um digito hexa-
if EQual* — isto 6, se o sinalizador ze- mesma forma, existe o ASR (Accumu- decimal para cada registro. Dois desses
ro estiver igual a 1 As instruções de des-
. lator Shift Right), para efetuar desloca- dígitos são unidos para formar o pós-
vio podem utilizar endereçamento rela- mentos de bits ã direita. byte. Por exemplo, o registro A
recebe
tivo em alguns tipos de Assembler. o valor de 8, e o registro B, o valor de
9. De modo que:
BEQ #&04 il
O microprocessador Motorola 6809, TFR A,B
significa: salte quatro bytes para a frente
a partir do início da próxima instrução, utilizado nos computadores compatíveis
se o sinalizador zero estiver igual a I. com a linha TRS-Color, tem um tipo de é traduzido para IF 89. Se, ao contrá-
Por meio de rótulos, indica-se ao mi- endereçamento implícito, também cha- rio, a instrução tivesse sido:
croprocessador o ponto do programa mado endereçamento de registros.
para onde o desvio deve ser realizado. Esta expressão refere-se às instruções TFR li. \
A primeira instrução a partir deste pon- da linguagem Assembler que não preci-
to é simplesmente precedida pelo rótu- sam seracompanhadas de um endereço correspondente
a instrução em código
lo. Por exemplo: pois operam cm um registro interno do de máquina seria IF 98.
microprocessador, que è estipulado pe- No endereçamento absoluto, ou am-
INICIO LDA &04 laprópria instrução. Por exemplo: pliado, a instrução é acompanhada do
endereço de dezesseis bits da locação de
ao passo que a instrução que produz o DECA memória a ser utilizada. Por exemplo:
desvio terá:
significa: diminua de o registro A (De-
1
ST A $7530
BEQ INICIO crement Accumulator). O código hexa-
decimal correspondente, que pode ser
O Assembler se encarregará, então, de encontrado na tnbela de conversão do significa:armazene o conteúdo do acu-
calcular o desvio relativo. No entanto, manual do microprocessador, é 4A. mulador da memória &H7530 (Store
se você está traduzindo manualmente No endereçamento imediato, o dado Accumulator). A tradução, no caso, se-
uma listagem em Assembly, a respon- a ser utilizado é o próprio argumento da ria B7 75 30 (note que os dois últimos
sabilidade pelo cálculo será sua. Códi- instrução. Por exemplo: bytes, correspondentesao endereço, são
go de máquina não emprega rótulos, mantidos na ordem direta, como é obri-
apenas números. Os microprocessado- ADDB #S7 gatório para a maior parte dos outros
res 6510 e 6502 comportam ainda mais tipos de microcomputador).

um tipo de endereçamento o endere- significa: adicione 7 ao registro B. O códi- A
instrução é um pouco complicada,
çamento por acumulador —
usado , go para ADD em modo imediato éCB, em pois envolve três bytes. Usando-se en-
principalmente com instruções de deslo- hexadecimal, de modo que a instrução dereçamento direto, porém, podemos
camento e rotação de bits. Por exemplo: completa acima é traduzida para CB 07. reduzi-la para uma instrução de dois
Existe ainda outra forma de endere- bytes. O microprocessador 6809 tem um
ASL A çamento imediato, na qual se usa um se- registro de página direta, que armaze-
gundo byte, chamado pós-byte. Neste na o byte mais significativo de um en-
significa: desloque o acumulador de um caso, a instrução assume a forma: dereço. Assim, todas as memórias na-
bit (Accumulator Shift Left). É possí- quela página podem ser endereçadas
vel utilizar esta instrução, também, com TFR A,B usando-se apenas um byte, no caso o
outras locações de memória, e não ape- menos significante.
nas com o acumulador. Neste caso, bas- que significa: transferir o conteúdo do Esse recurso funciona da seguinte
Y

IIIIIIIIIIIIMHMH^HHHBBHIIIIHIIIII
maneira: o registro de página dircta é a seção de endereçamento indexado, pa- JMP e JSR. Estes desvios podem ser de-
carregado usando-se a instrução TFR, ra se obter o código correspondente. Em finidos em termos de endereços finais de
mencionada acima, ou a insiruçào EXG seguida, deve-se consultar o pós-byte. página direta, ampliados, ou, ainda, in-
(EXchanGe), que troca os conteúdos de No exemplo dado acima, consulta-se dexados, de modo que os códigos de
dois registros entre si. LDA sob a seção de endereçamento in- máquina equivalentes se alteram de
dexado, e se obtém A6. Depois, con- acordo. Desvios condicionais, entretan-
EXG A, DP sulta-se o endereço [mmmm], que indi- to, utilizam endereçamento relativo.
ca um endereço geral de dezesseis bytes, Com endereçamento relativo,
Na instrução acima, pede-se para in- na tabela de pós-bytes. Isto dá 9 F (ou inlorma-se à UCP quantos bytes o pro-
tercambiar os registros A e página dire- BF, ou DF ou FF, pois os pós-bytes grama deve pular para a frente ou para
ta (Direct Page). A instrução não ape- são repetidos para cada registro: como trás em relação à instrução de desvio.
nas define a página direta com o que foi |mmmm] é independente de qualquer re- Existem dois tipos de desvios: um
carregado em A com um comando LDA gistro, aparece quatro vezes). desvio ordinário de oito bits, que pula
prévio: ela também armazena o núme- Assim a instrução completa: para até 127 bytes para a frente ou 128
ro de página direta previamente retido bytes para trás, e um desvio longo de de-
por DP, de volta para o registro A. Da- LDA ISFFFE] zesseis bits, que pode abranger 32 767
liesse número pode ser jogado para uma bytes para trás.
locação de memória qualquer, usando é traduzida para A6 9F FF FE.
a instrução STA. Usando os registros U, S, X e Y, bem BEQ SFA
Obyte mais significante da página di- como o contador de programa, pode-se
reta —
75, neste exemplo —
está agora estipular tanto o endereçamento não-in- pulará seis bytes para trás, a partir do
definido, e o byte menos significante po- direto (sem colchetes), quanto o ende- inícioda instrução seguinte, se o indi-
de ser dado com a instrução. Neste ca* reçamento direto (com colchetes), usan- cador de zero {zero flag) estiver ligado.
so, para fazer a tradução manual, é ne- do-se deslocamentos (offsets). Os des- FA é - 6 em complemento de dois. Al-
cessário consultar a instrução STA na locamentos podem ser constantes —
de- ternativamente, temos o desvio longo:
labela de códigos, sob a seção de ende- cimais, hexadecimais de oito ou dezes-
reçamento indireto. O
resultado é 97, seis bits — ou o conteúdo de outros re- LBLQ SOAOO
em hexadecimal. Assim, a instrução conteúdo é somado ou sub-
gistros. Este
completa do exemplo será 9730. traído do conteúdo-base de um dos cin- que saltará 2560 bytes para a frenie, se
Obviamente, não vale a pena repelir co endereços indexáveis. o indicador de zero estiver ligado.
todo este procedimento cada vez que se Os desvios sempre utilizam endereça-
quiser armazenar dados em uma loca- LDA 0 ,X mento relativo —
não há outro tipo de
ção de memória. Definir o endcreço- endereçamento disponível para eles. Po-
base da página direta toma muito mais significa: carregue o registro acumula- rém, como muitas vezes é trabalhoso
tempo do que o economizado com a re- dor com dados na locação de memória, calcular o tamanho de um salto,
dução da instrução de três bytes para cujo endereço está armazenado no re- procura-se utilizar rótulos.
dois bytes. Mas muitas vezes é suficien- gistro X. Nesse exemplo, o deslocamen- Os rótulos são palavras (simbólicas)
te definir a página direta no começo de to é zero. Outros exemplos: criadas pelo programador, que indicam
um segmento de programa e, dat em ao microprocessador qual é o ponto do
diante, armazenar todos os dados na LDA I.X programa para onde o desvio deve ser
mesma página. realizado e, a parlir desie ponto, a pri-
Endereçamento indireto ocorre quan- significa: carregar o acumulador com o meira instrução è simplesmente precedi-
do o microprocessador precisa examinar endereço em X, somado de I. da pelo rótulo. Por exemplo:
uma memória indicada por um endere-
ço que, por sua vez, contém um segun- LDA - 16, INICIO DEC A
do endereço, no qual estão os dados que
serão carregados no acumulador. A for- significa: carregar o acumulador com o ao passo que a instrução que produz o
ma de notação utilizada é entre col- endereço em Y*, diminuído de 16. desvio terá:
chetes:
LDA ($10,X) BEQ INICIO
LDA ISFEEEI
é a versão paraendereçamento indexa- O Assembler se encarregará, entào,
Por meio desta instrução, pede-se ao do. Ele carrega o acumulador com o de calcular o desvio relativo, que pode-
microcomputador para recuperar um conteúdo da locação de memória cujo rá ser para a frente, se o rótulo estiver
endereço, nas locações de memória endereço está indicado em X, e que é depois da instrução de desvio, ou para
FEEE e FFFF
(o endereço completo, adicionado dc 10 (em hexadecimal). trás, se estiver antes dela. Entretanto, se
com dois bytes). Em todos estes casos, o código ope- você está traduzindo manualmente uma
Prosseguindo, a instrução carrega no racional para LDA pode ser encontra- listagem em Assembly, a responsabili-
acumulador A o conteúdo na locação do na seção de endereçamento indexa- dade pelo cálculo será sua, já que códi-
com este segundo endereço. do, e o pós-byte apropriado precisa ser go de máquina não emprega rótulos,
O endereço indireto também pode ser adicionado, a partir do que for encon- apenas números. Para fazer o cálculo,
com os registros U, S, X e Y,
realizado trado na tabela de pós-bytes. Desloca- conta-se o número dc bytes a parlir do
bem como com o cortador de programa. mentos de oito bits e endereços de de- final da instrução de desvio até o come-
Em todos esses casos de endereça- zesseis bits seguem-se a isto. ço da instrução para a qual se deseja
Imento indireto, é necessário consultar o Desvios em linguagem Assembler são saltar. Lembre-se que, para um sal-
Imnemônico da instrução na tabela, sob programados por meio das instruções to longo, isto tomará dois bytes.
Illlllllllll

DEFINIÇÃO DE MATRIZES
ENTRE DADOS EM UMA MATRIZ
COMO PROGRAMAR MATRIZES
RECUPERAÇÃO DE INFORMAÇÕES
USOS PARA AS MATRIZES

Se você tem uma grande quantidade de um único dado. Esta é uma maneira programa exposto neste artigo. Entre-
muito conveniente de lidar com infor- tanto, a estrutura do programa é a mes-
dados inter relacionados, a
mações pois, para localizar uma delas, ma para qualquer matriz bidimensional,
informação pode estar perdida entre basta se referir a um elemento do con- pouco importando o tipo de informação
eles. Coloque-os numa matriz junto, por meio dos seus números de li- que ela contém.
nha e de coluna. Como exemplo, suponha que você se-
e o computador extrairá A matriz armazena itens reais, tais ja um professor interessado em classifi-
exatamente a informação desejada. como os parafusos da ilustração abai- car os animais de estimação trazidos por
xo, onde se pode encontrar imediata- um conjunto de crianças. Em primeiro
mente a caixa que contém parafusos de lugar, seria preciso anotar o nome das
Agora que você já conhece como um latão de 38 mm, ou para qualquer ou- crianças e descrever quantos animais de
conjunto pode ser empregado para con- tra que se esteja procurando. Neste ca- cada grupo elas possuem. A lista seria

servar informações em um programa (li- so o dado da matriz é o número de pa- mais ou menos assim:
ção Conjuntos: Caixas de Informação. rafusos em cada caixa.
página 192), podemos passar ao estudo A matriz pode também guardar in- um coelho.
Sílvia: dois periquitos,
de matrizes. Matriz (ou matrix) é to- formações abstraias, como o número de João: um cachorro, quatro peixes.
do conjunto bidimensional que serve de revendedores de automóveis, discrimi- Carlos: dois hamsters, um gaio.
meio para armazenar grupos de dados nados segundo a sua nacionalidade e
inter-relacionados. marca dos carros vendidos.
Um conjunto bidimensional é, grafi- Informações como esta são frequen- Re curso muil» úlil para armazenar dados,
camente, como uma pilha de gavetinhas, temente colecionadas como resultado de as ma triz es servem lamhém para
onde cada gaveta serve para : levantamentos, que são a base para o classificar pequenos item como parafusos.
IIIIIIIIIHUH
Jaci: um cachorro, um gaio, um hamster.
Belo: um raio, um coelho, dois peixes.
Enireianio, em uma lista como essa
lorna-se um tanio difícil extrair infor-
mações como 'quantas pessoas pos-
suem gatos?", ou "quem tem mais de
quatro animais?" —
e quanto maior for
a iista, mais difícil será também obier
respostas.
A melhor maneira de resolver o pro-
blema seria disiribuir as informações em
forma de tabela ou quadro, com o no-
me dos animais dispostos no alto e o das
crianças à esquerda. Pois bem, é exata-
mente assim que funciona uma matriz
bidimensional.
Em um exemplo pequeno como este
é simples encontrar a resposta para qual-
quer pergunta sobre os dados. Enireian-
io, o computador trabalha com um in-
findável número de informações. Se vo-
cê examinar todo o conjunto de dados
para descobrir quem tem pelo menos um
gaio, ou se quiser saber o nome das pes-
soas que possuem raios, verificará que
o trabalho será lanio maior quanlo mais
ampla for a quantidade de dados. Por
sorte, o computador pode cumprir essa
tarefa em questão de segundos.

DEFINA A MATRIZ

Equacionado o problema, o passo se-


guinte será colocar a informação den-
tro do computador. Se você voltar às pá-
ginas 192 a 195 verá como definir e usar
uma matriz unidimensional (também
chamada de conjunto). Matrizes bidi-
mensionais são muito similares, envol-
vendo apenas um pouco mais de Iraba-
Iho para serem definidas.
Uma matriz unidimensional pode ser
escrilana forma A(N), onde N é o nú-
mero dos seus elemenios. Uma malriz
bidimensional, por sua vez, é definida
como A(L,C), onde L é o número de li-
nhas e C o número de colunas. Na ver-
dade, pouco importa se você a definir
de forma invertida, como A(C,L), com
as colunas antes das linhas, desde que
seja coerente com a primeira ou a segun-
da definições.
Contudo, mesmo irabalhando com
uma matriz bidimensional, você preci-
sará definir duas matrizes unidimensio-
nais que sirvam de cabeçalho para as co-
lunas e para as linhas (no nosso caso,
uma matriz conterá o nome das crian-

Assim como as bolinhas da ilustração,


distribuídas ordenadamente
segundo seu tamanho e COf, as informações
devem ser armazenadas na memória
de acordo com o grupo a que pertencem.
"

ças e a outra o nome dos animais). A lho das colunas, outra para o cabeçalho
matriz bidimensional conterá os dados. das linhas e uma para cada linha da ma-
Vamos chamar as duas primeiras ma- triz principal. Note também que você
trizes de PETS (Õ e CHS (R) e a mairiz deve entrar um item de dado para cada
de dados de N (R,C). Uma outra ma- espaço na matriz, mesmo que ele seja ze-
triz, PT (R), conterá o número toial de ro, ou o computador responderá com
animais em cada linha. No Spectrum, as uma mensagem de erro.
matrizes são rotuladas de p$ (c), c$ (r), Agora que os dados estão dentro do
n (r, clep (r), pois é permitido apenas computador, você deve decidir o que fa-
um caractere para a formação dos no- zer com eles. Um
de seus recursos é ofe-
mes. O programa não funcionará no recer tantas opções quanto possível: afi-
ZX-81. Eis um programa para dimen- nal, é o computador que vai trabalhar,
sionar a matriz e ler os dados de um co- e não você.
mando DATA.

li l '//j
Será melhor descrever as opções em
100 C-7:R-5 forma de menu. E para a pesquisa dos
110 DIM PETS(C) ,CHS(H) ,N(R,C) ,P animais você provavelmente precisará
T (H)
120 FOR J-1TOC READPETS ( J) NEXT : :
do seguinte:
130 FORJ-1TOR HEADCHS ( J) NEXT : :

140 FOR J-1TOR


150 FORK-1TOC
160 BEAD N(J.K) :NEXT:NEXT
3000 DATA PERIQUITO, GATO. CACHOR 300 LET fo-0: CLS
RO PEIXE RATO HAMSTER COELHO
, . , .
310 PRINT 1
"MENU" '

3010 DATA SILVIA, JOÃO, CARLOS, JA 320 PRINT '"1- LISTAR ANIMAIS"
Cl BETO
,
330 PRINT LISTAR CRIANÇAS"
3020 DATA 2.0,0,0,0,0,1 340 PRINT INTRODUZIR TIPO
3030 DATA 0.0.1.4,0.0,0 DE ANIMAL"
3040 DATA 0,1.0.0,0,2,0 350 PRINT "4 INTRODUZIR NOME
3050 DATA 0,1.1.0.0.1,0 DA CRIANÇA"
3060 DATA 0.0.0.2.1.0.1 360 PRINT "5 INTRODUZIR NUMER
0 DE ANIMAIS
370 PRINT "6 MOSTRAR A MATRIZ

380 PRINT "SELECIONE OPCAO"


'
'

100 LET LET c-7 : r-5 390 INPUT a


110 DIM pS(c,7): DIM cSír,5) 395 IF a<l OR a>6 THEN GOTO
DIM n(r.c) DIM P(r) :
390
120 FOR j-1 TO c: READ pS(j) 400 CLS
NEXT 3 410 GOSUB (a*100+400)
130 FOR J-1 TO r: READ cS(j) 420 GOTO 300
NEXT J
140 FOR j-1 TO r
150 FOR k-1 TO c
160 READ níj.kl! NEXT k: NEXT
i No TRS-80, multiplique por 2 os va-
3000 DATA "PERIQUITO" "GATO" ,"C
,

lores utilizados com o PRINT®.


ACHORRO" "PEIXE" "RATO" "HAMSTE
,
. ,

R" "COELHO"
,
300 FOUND-0:CLS
3010 DATA "RODRIGO" "RICARDO"
, ,
310 PRINT §43. "MENU"
FERNANDA" "BEATRIZ" "JÚNIOR"
, ,
320 PRINT §98. "1 LISTAR ANIMAIS
3020 DATA 2.0.0,0.0.0,1 330 PRINT 6130. "2 LISTAR CRIANC
3030 DATA 0.0.1.4.0,0.0 AS
3040 DATA 0.1,0.0.0,2,0 340 PRINT #162. "3 INTRODUZIR TI
3050 DATA 0.1.1,0.0.1.0 PO DE ANIMAL
3060 DATA 0.0,0,2,1.0.1 350 PRINT §194. "4 INTRODUZIR NO
ME DA CRIANÇA"
As variáveis R c C foram usadas pa- 360 PRINT §226, "5 INTRODUZIR NU
ra facilitar a adaptação do programa: MERO DE ANIMAIS"
afinal, é improvável que sua matriz te- 370 PRINT §258. "6 MOSTRAR A MAT
nha o mesmo número de linhas e de co- RIZ"
380 PRINT PRINT "ESCOLHA A OPCAO
:

lunas que a que apresentamos aqui. As-


sim, tudo o que você tem a fazer é tro- 390 INPUT A
car os números na linha 100 e, logica- 395 IF A<1 OR A>6 THEN 390
mente, as informações nas linhas dos co- 400 CLS
mandos DATA. 410 ON A GOSUB 500.600.700,800.
Note agora que os dados entram na 900.1000
matriz. Existe uma linha para o cabeça- 420 GOTO 300
; ::

IIIIIIIIIIMMI ACÃOBAS

530 PHINT pS (J) informando ainda quantos espéci


540 NEXT J cada criança possui.
550 PRINT " PRESSIONE QUALQU
'
1

300 FO-0:CLS
EH TECLA PARA HETORNAR"
310 LOCATE 17,1:PRINT"MENU*
560 PAUSE 0
320 LOCATE 7 4 PRINT" 1 LISTAR, : .
570 RETURN
ANIMAIS" 699 lem ** OPCAO 3 •*
599 REM ** OPCAO 2 **
330 LOCATE 7:PRINT"2. LISTAR CR 700 PRINT " INTRODUZA TIPO DE
' '

600 PHINT ''"LISTA DE CRIANÇAS


I ANCAS" ANIMAL"
340 LOCATE 7:PRINT"3. INTRODUZI 705 DIM 1S(7): INPUT LINE lS
610 PRINT - '

R TIPO DE ANIMAL" 710 PRINT " PESSOAS QUE TEM UM


620 FOR j-1 TO r '

350 LOCATE 7:PRINT"4. INTRODUZI "íiS


630 PRINT cS(j)
R NOME DE CRIANÇA" 720 FOR J-1 TO c
640 NEXT J
360 LOCATE 7:PHINT"5. INTRODUZI 730 IF PS(J)-1S THEN LET fo-j
650 PHINT "PRESSIONE QUALQUE
'
'

R NOMERO DE ANIMAIS" 740 NEXT J


H TECLA PARA RETORNAR"
370 LOCATE 7:PRINT"6. MOSTRAR A 750 IF fO-0 THEN PHINT " ANIM
660 PAUSE 0
MATRIZ" AL NAO ENCONTRADO. TENTE OU'
670 RETURN
380 PRINT: PRINT LOCATE 20:PRINT :
RA VEZ " GOTO 700
.
:

"OPÇXO" 760 FOR J-1 TO r


390 INPUT A
395 IF A<1 OR A>6 THEN 390
400 CLS
410 ON A GOSUB 500,600,700,800.
900.1000
420 GOTO 300 510 PRINT PHINT:

520 FOR J-1TOC


530 PRINT PETS(J)
GE El] 540 NEXT
550 PRINT:PRINT"PRESSIONE QUALQ
UER TECLA PARA HETORNAR"
560 IF INKE1ÍS-""THEN560
570 RETURN
320 VTAB 5: 599 REM ttt OPCAO 2 Itl
LISTAR ANIMAIS" 600 PRINTTAB (5) "LISTA DE CRIAN;

330 HTAB 8: PRINT "2. LISTAH C CAS"


Hl AN CAS" 610 PRINT PRINT
:

340 HTAB 8: PRINT "3. INTRODUZ 620 FOR J-1TOR


IR TIPO DE A IIMAL" 630 PRINT CHS (J)
350 HTAB 8: PRINT "4. INTRODUZ 640 NEXT
IH NOME DE CRIANÇA"
650 PRINT:PRINT"PRESSIONE QUALQ
360 HTAB 8: PRINT "5. INTRODUZ UER TECLA PARA RETORNAR"
IR NUMERO DE ANIMAIS" 660 IF INKEYS-""THEN660
370 HTAB 8: PRINT "6. MOSTHAR 670 RETURN
A MATRIZ"
380 PRINT : PRINT HTAB 20:
DE El!
i

HINT "OPCAO
390 INPUT A
499 REM *** OPCAO 1 ***
395 IF A < 1 OH A > 6 THEN 390
500 PHINT TAB 10)"LISTA DE A (

400 HOME
NIMAIS"
410 ON A GOSUB 500,600,700,600 510 PHINT PRINT :

.900 1000
,
520 FOR J-1 TO C
420 530 PRINT PETS (J)
GOTO 300
540 NEXT
550 PRINT PRINT "PRESSIONE Q
:

ESCREVA AS SUB ROTINAS UALQUER TECLA PARA RETORNAR"


560 GET AS
As sub-rotinas a seguir servirão para 5 70 RETURN
o 599 REM *** OPCAO 2 ***
iníciodo trabalho, embora, mais tar-
600 PHINT TAB 10);"LISTADE (
de, você possa adicionar outras opções.
CRIANÇAS"
A primeira imprime apenas a lista de 610 PRINT PRINT:

animais, fazendo uma procura na ma- 620 FOR J-1 TO H


triz PETS( ) ou p$( ). A segunda faz a 630 PRINT CHS(J)
mesma coisa para imprimir a lista de 640 NEXT
crianças. 650 PRINT PRINT "PRESSIONE Q
:

UALQUEH TECLA PARA HETORNAR"


660 GET AS
670

499 REM *« Ta mais interessante. Se A matriz n


500 PRINT Jnar o nome de um animal, o revendedores d
_510 PRINT 1

friputador imprimirá uma lista de ) classificados por


520 FOR j-1 TO c rianças quetêm no mínimo um deles. país e mar tu de automóvel.
IIIIIIIL

770 IP ntj.fmi
S(3);" "jn"
775 NEXT j
780 PRINT
EH TECLA PARA
!
|
'*

710
715
P*0G1AMAÇÃ0BAS,C,4

INPUT PS
PRINT PRINT
:
" ":N(J,FO)
775 NEXT
1 III
;

770 IFN(J,FO)>0THENPRINTCHS(J)

780 PRINT PRINT"PRESSIONE QUALQ


:

UER TECLA PARA RETORNAR";


III
I :

7B5 PAUSE 0 720 FORJ-1TOC 785 IFINXEYS-*"THEN785


790 RETURN 730 IFPETS (J) -PSTHENFO-J 790 RETURN
740 NEXT
750 IFFO"0THENPRINT "ANIMAL NAO
ENCONTRADO. TENTE DE NOVO " GOT
!
:
[SE]
0700 699 REM *** OPCAO 3
760 FORJ-1TOR 700 PRINT TAB 101;"DIGITE O (

TIPO DE ANIMAL"
705 PRINT TAB 5); "LISTA DE T 1

ODOS QUE TEM "


710 INPUT PS
715 PRINT PRINT :

FOR J - 1 TO C
IF PETS(J) - PS THEN FO -

40 NEXT
50 IF FO - 0 THEN PRINT "ANI
MAL NAO FOI ENCONTRADO TENTE .

- NOVAMENTE!": GOTO 700


\ 760 FOR J - 1 TO R
(J.l PRI
NT CHS(J)
775 NEXT
780 PRINT PRINT "PRESSION
:

i E QUALQUER TECLA PARA RETOR


\ NAR"
H 785 GET AS
\ 790 RETURN

Es[a rotina c mais complica-


da, de modo que valo a pena
explicá-la com mais detalhes.
A
linha 7 0 guarda nossa
1

entrada na variável PS (iS no


Speclrum). Digamos, por
exemplo, que nossa enira-
. da seja "GATO"; assim,
\ PS = "GATO" (ou iS =
| "GATO"). As linhas 720
l a 740 verificam se há al-
\ gum "GATO" na lisla
de animais. Em caso
positivo, a variável FO
receberá o número da
coluna em que "GATO"
achado. No nosso caso, PO = 2
porque "GATO" está na coluna 2.
Se j computador atingir a linha 750
e FO for igual a 0 (ou seja, se seu valor
for igual a 0 na linha 300), isso signifi-
ca que o animal pedido não está na lis-
ta. Em consequência o programa reco-
meçará.
As linhas 760 a 77? percorrem cada
elemento na coluna 2. Se algum elemen-
to for maior que 0, isso significa que
a pessoa nessa linha tem um gato e seu
nome será impresso junto com a infor-
mação de quantos animais dessa espé-
cie ela tem.
Verifique o programa e veja se você
pode seguir o que o computador está fa- I
zendo a cada passo. A opção 4 permite I
' j ! J

ACÁO BASIC

900 PRINT "' DIGITE UM NUMERO


entrar o nome de uma pessoa para ver 850 IF fo-0 THEN PRINT "NOM '
'

a lista de seus animais. E NAO ENCONTRADO. TENTE OUTRA V PARA LISTAR TODOS OS QUE TE
O programa funcionará de modo EZ" GOTO 800
: M AO MENOS ESTE NUMERO DE ANI
860 FOR J-1 TO C MAIS"
quase igual ao da última rotina. Desta
870 IF n{fo,j)>0 THEN PRINT n 910 INPUT a
vez, entretanto, o computador procura-
(fo, j) j" ";pS(J1 915 PRINT 1 '

rá por uma Unha particular da matriz, 875 NEXT 3 920 FOR j-1 TO r
enão por uma coluna, como acontecia 860 PRINT "' PRESSIONE QUALQU
'
930 LET p(j)-p(j)+n(j.k)
no exemplo anterior. ER TECLA PARA RETORNAR" 935 NEXT k
885 PAUSE 0 940 LET P(J)-0
890 RETURN 945 LET p(j)-0
950 NEXT }
95S IF fo-0 THEN PRINT
'
"NIN '

799 REM «" OPCAO 4 ** GUEM TEM TANTOS ANIMAIS !"


800 PRINT '• "INTRODUZA O NOME 960 PRINT ''" PRESSIONE QUALQU
DA CHI ANCA" 799 REM III OPCAO 4 (IH
ER TECLA PARA RETORNAR"
800 PRINTTAB (2) "DIGITK D NOME
:

805 DIM fS(5); INPUT LINE fS 970 PAUSE 0


810 PRÍNT "ANIMAIS PERTENCENTE DE UMA CRIANÇA"
805 PRINT" LISTA DE TODOS OS ANI 980 RETURN
S A ";f$
815 PRINT ' MAIS QUE PERTENCEM A "

820 FOR j-1 TO r 810 INPUT FS


830 IF cS(j)=fS THEN LET ÍQ'3 815 PRINT PRINT :

840 NEXT 3 B20 FORJ-1TOR 899 REM tM OPCAO 5 Itt


830 IFCHS (J) -FSTHENFO-J 900 PRINT"DIGITE UM NÚMERO PARA
840 NEXT LISTAR TODOS QUE TEM AO MENOS
850 IF FO-0THENPRINT: PRINT "NOME ESTE NUMERO DE ANIMAIS";
NÃO ACHADO. TENTE NOVAMENTE "
!

910 INPUTA
GOTO800 915 PRINT PRINT:

860 FORJ-1TOC 920 FORJ-1TOR


870 IFN (FO J} >0THENPRINTN (FO, J)
,
925 FORK-1TOC
;" ";PETS(J) 930 PT<J)-PT(J)+N(J.K)
875 NEXT 935 NEXTK
880 PRINT PR I NT "PRESSIONE QUALQ
;
940 IFPT(J)>-ATHENPRINTCHS(J) t"
UER TECLA PAPA RETORNAR"; ":PT J) FO-1
| :

885 IFINKEY$-""T!iErJ885 945 PT(J]=0


890 HETURN 950 NEXT
Que problemas podem ocorrer 955 IFFO-0THENPRINT; PRINT"NINGU
com laços múltiplos?
Definir uma matriz permite exercitar
ara SM TEM TANTOS ANIMAIS!"
960 PRINT:PRINT"PRESSIONE QUALQ
799 REM *** OPCAO 4 *** UER TECLA PARA RETORNAR"
seus conhecimentos sobre os coman-
dos FOR. ..NEXT e IF...THEN (tente
Í100 PRINT TAB 5);"DIGITE 0 N ( 970 IF INKEYS-""THEN970
contar quantos desses comandos exis-
OME DE UMA CRIANÇA" 980 RETURN
tem nos programas ai resentados aqui;
805 PRINT "LISTA DE TODOS OS A
você logo vai perceber que eles são
muitos). Porém, a parte mais difícil da
NIMAIS QUE PERTENCEM A ";
810
815
INPUT FS
PRINT PRINT
KMi
programação de matrizes diz respeito :
899 REM *** OPCAO 5 ***
820 FOR J - 1 TO R 900 PRINT "DIGITE UM NUMERO PA
ao uso de iaços FOR.. .NEXT múltiplos,
830 IF CHS(J) " FS THEN FO - J RA LISTAR TODOS QUE TEM AO MENO
ou "aninhados" listo é, um dentro do
outro). Com efeito, é nessa parte que S ESTE NUMERO DE ANIMAIS";
840 NEXT 910 INPUT A
os iniciantes, e mesmo os programado-
850 IF FO - 0 THEN PRINT PR :

915 PRINT PRINT


res experientes, mais se confundem. :

Examine as linhas dos programas do


INT "NOME NAO ENCONTRADO. TENTE 920 FOR J-1
TO H
artigo. Elas são responsáveis pela lei-
NOVAMENTE!"; GOTO 800 925 FOR K - 1 TO C
860 FOR J - TO C 1
930 PT(J) - PT(J) + N{J,K)
tura dos dados armazenados nas linhas
870 IF N(F0,J) > 0 THEN PRINT 935 NEXT K
DATA.
N(F0,J1 ;" ";PETS(J) IF A < - PT(J) THEN PRIN
Cada linha de DATA corresponde a 875 NEXT
940
uma linha da matnz de dados, de modo T CHS(J) ";PT(J) :F0 - 1
880 PRINT PRINT "PRESSIONE Q 945 PT(J) - 0
que o FOR,., NEXT que controla a leitu-
:

UALQUER TECLA PARA RETORNAR": 950 NEXT


ra das linhas deve vir antes (laço mais
885 GET AS 955 IF FO - 0 THEN PRINT PR
externo). Se a linha de DATA contivesse :
890 RETURN INT "NINGUÉM TEM TANTOS ANIMAIS
os elementos de uma coluna da matriz,
teríamos que usar como FOR. ..NEXT A opção 5 pede que você entre um
externo aquele que lé as colunas. 960 PRINT PRINT "PRESSIONE Q
:
número e imprime a lista de pessoas que UALQUER TECLA PARA RETORNAR";
É por isso que o conjunto é dimen-
têm no mínimo esse número de animais. 970 GET AS
sionado como N (L,C), em vez de N IC,
L). A ordem dos índices de linha e co-
Ela também informa quantos animais 980 RETURN
luna no comando DIM não é muito im cada pessoa tem.
portante, desde que você os faça Digite então a próxima sub-rotina da Antes de comparar o número que vo-
corresponder aos laços FOR. ..NEXT. seguinte forma: cê imprimiu com os totais para cada
Os cabeçalhos para as linhas e co- criança, o computador precisa calcular
lunas devem ser definidos separada- esses totais. As linhas 920 e 925 definem
mente, para facilitar a compreensão. os laços que percorrem as linhas e colu-
nas da matriz, enquanto a linha 930 cal-
cuia o total de animais em cada linha. 1000 PRINT "CRIANÇAS" NIMAIS
Os totais são armazenados em um eon-
junio chamado PT( ), ou pl h no Spec- 1010 HTAB 15
irum. Se o total de cada linha for maior 1015 FOR J - 1 TO C
1020 PRINT Jj" "i
ou igua! ao número que você entrou, o
1025 NEXT PRINT
:

nome da criança será exibido na tela, 1030 FOR J - 1 TO R


juntamente com o número de animais 1035 PRINT PRINT CHS
: (J) : TAB COMO USAR A DECLARAÇÃO REM
que ela possui. ( 15) -,
3 basta que o programa em BA
Assim que o nome de alguém for im- 1040 FOR TO C K-1 SIC esteja correto ou passe por todos
é preciso ainda que ele es-
presso, 0 indicador FOLIND (ou seja, PRINT N(J.K) " " ;
1050 :
:

achado, em inglês) será igualado a Se I . 1060 NEXT NEXT :


teja bem documentada e estruturado
1070 PRINT PRINT PRINT "PR e forma lógica e clara.
FOUND ainda for igual a 0 quando o : :

Para evitar confusões por parte do


compulador atingir a linha 955, isso sig- ESSIONE QUALQUER TECLA PARA RET
ORNAR"; suário e mesmo do programador na
nifica que nenhuma criança lem aquele compreensão do que foi dignado.
1080 GET AS
número de animais que você solicitou, 1090 RETURN s-se u lizar u
e o programa lhe dará essa informação nbecido como documentação interna
por meio de mensagem. do programa. Este identifica, por meio
A última opção —
de número 6 — de títulos e comentários colocados na
mostra a matriz na tela. listagem, as diversas partes do progra
999 REM III OPCAO 6 III Isso é feito pelo comando REM.
Como é difícil encaixar lodos os no- 1000 PRINT"CRIANÇAS" "ANIMAIS" .
.

uma abreviatura da palavra REM


que é
mes dos animais de estimação no topo 1010 LOCATE 15 ark [comentário, em mglésl. O REM
da tabela, o programa imprime núme- 1015 FORJ-1T0C é uma declaração executável (ou
i

ros de referência, em vez de palavras. Em 1020 PRINTJ; seja, ao encontrá-la em um programa,


compensação, ele imprime os nomes dos 1025 NEXT PRINT :
d computador simplesmente a ignora
proprietários. 1030 FORJ-1TOR passa adiante).
1035 PRINT:PRINTCHS(J) ;TAB(15) Uma das funções do REM consiste
1040 FORK-1TOC em identificar o programa, prestando
1050 PRINTN J K! ( ,
informações (chamadas cabeçalho) co-
1060 NEXT NEXT :
i: para que serve, para que máquina

1070 PRINT PRINT PRINT"PRESSION


: :
está destinado, quem c
E QUALQUER TECLA PARA RETORNAR" quando etc. Eis um exeme
1010 PRINT TAB 9;' REM
1015 FOE j-1 TO c 15 REM PROGRAMA CREPF
1020 PRINT J " "i
;

25 REM Simular o 3000 de crepe


1025 NEXT }: PRINT 30 REM VERSÃO 1 DATA :2 0/0 2/ 1986
:

1030 FOR j-1 TO r USOS PARA AS MATRIZES 35 REM NOME P/ GRAVAÇÃO CREP01 :

1035 PRINT 'cSÍJ) ;TAB 9; REM


1040 FOR k-1 TO G 45 REM COMPUTADOR TK-90X :

1050 PRINT n J k) " (


" ,
;
Uma matriz usada dessa forma c cha- 50 REM MEMORIA NECESSÁRIA 16 K :

1060 NEXT k mada de base de dados. É possível criar 55 REM PROGRAMADO POR: RENATO
1065 NEXT J bases de dados para os mais diversos SABBATINI
1070 PRINT '"' PRESSIONE QUALQU fins; para um Icvantamenro da vida ani- 60 REM
ER TECLA PARA RETORNAR" mal, por exemplo. Numa pesquisa des- acação de cabeçalhos como
1080 PAUSE 0 se género, a base de dados mostraria o a muitos dissabores,
1090 RETURN número de certos animais, assim como função do REM é informar pa
o tipo de habitai onde eles são encon- rvem certas partes do progra
trados. As linhas da matriz indicariam . Por exemplo:
os tipos de animais, e as colunas, os ha- 350 REM
999 REMIU OPCAO 6 III bitats. Em seguida, os dados poderiam 355 REM TESTA SE NUMERO DE NA
1000 PRINT #32 "CRIANÇAS" "ANIM
, ,

ser examinados para verificar a distri- VES=ZERO


AIS" 360 REM SE E TERMINA O PRO-
buição dos animais em determinadas re- ' ,

1010 PRINT «72, GRAMA


1015 FOR J-1 TO C giões ou épocas do ano.
365 REM
1020 PRINT J A base de dados pode ser aplicada 370 IF NAVES=0 THEN GOTO 999
1025 NEXT: PRINT lambem em levantamentos de tráfego
cm estradas: para verificar, por exem- ideal seria colocar um comentá-
O
1030 FOR J-1 TO R
1035 PRINT PRINT CHS (J) TAB{8);
: plo, que lipos de carros passam por ca- riopara cada linha do programa. I

1040 FOR K-1 TO C pode ser feito facilmente nos mie


da seção de uma rodovia. Ela se presta
1050 PRINT N(J.K) que aceitem comandos múltiplos
ainda para aplicação no campo da nu-
1060 NEXT K.J linha:
Irição.Assim, a matriz conteria os da-
1070 PRINT:PítrNT:PRINT " PRESSI 500 GOSUB 890 REM SUBR
dos de cada tipo de alimento, com rela- :

ONE QUALQUER TECLA PARA RETOR


NAR" ção ao seu eonieúdo de proteínas, gor-
1080 IF INKEYS-"" THEN 1080 duras, carboidratos e calorias. Com O emprego de comentários é simpli-
1090 RETURN uma matriz desse tipo, seria fácil impri- ficado, em vários micros, pelo apóstro-
mir iodos os alimentos que apresentas- fo Cl, usado como abreviatura

HM] sem uma certa quantidade de proteínas,


ou tantas calorias, ou que oferecessem
comando REM:

999 REM certas combinações de elementos.


IIIIIHIB 1 PROGRAMAÇÃO DC JOGOS 9 HIIHIIII
Sair da rotina e fazer da vida uma
aventura errante: quantos
de nós já não sonhamos com isso? Veja

UMAA/ENT"BJ como fazer essa

aventuras
mudança,
incríveis...
viver

no computador.

Os jogos de aventura são uma boa al- Na realidade, a popularização dos jo-
ternativa para quem está cansado dos gos de aventura começou quando um jo-
arcaicos videogames e fliperamas. Neles, vem programador chamado Scott
o jogador é totalmente envolvido por Adams desenvolveu, em 1978, um jogo
um mundo fantástico, criado unicamen- para microcomputador TRS"
te pela imaginação do programador. provou que era possível escre-
ver uma aventura razoá-
A ORIGEM DOS JOGOS DE AVENTURAS
vel em um espaço de
memória bem menor. Dtt8c ent.
temas de jogos adotados por Adams
A ideia de criar jogos de aventura A 1 erra da Aventura. O Refúgio do
surgiu da popularidade, nos EUA e na Pirata, O Mistério do Parque de
Grã-Bretanha, dos jogos de ação não- Diversões etc. têm sido usa-
computadorizados, tais como Masmor- dos e recusados inúmeras vezes
ras e Dragões e, ao mesmo tempo, do pelos escritores de outros jogos. ,

desejo de se utilizar os computadores


para fazer coisas mais interessantes do
que processar dados. TIPOS DE AVENTURAS
Por outro lado, os jogos nào-compu- '

tadorizados não atendiam plenamente Como as aventuras


para grandi
1
demanda do público, que exigia eme computadores, os jogos de Adams
ções cada vez mais fortes. Essa demar apresentavam SOfDCMC tCXKM na tela
da só foi satisfeita pelos jogos de aven Na verdade, os programas que usam
turas programados para o eomputadoi apenas textos são ainda os mais popu-
Em Masmorras e Dragões os jogadc lares .

res assumem o papel de certos persona- Existem ainda inúmeros jogos de


gens, que lutam encarniçadamente (na aventura para computadores que utili-
imaginação) num lugar conhecido cor zam ilustrações desenhadas na tela pa-
Masmorra. Esse lugar, por sua vez, < ra situar, orientar e motivar o usuário.
criado por outro jogador, que faz o pa Entretanto, os gráficos precisam ser
pel do Senhor da Masmorra. Nos jogo: muito sofisticados, para poder compe-
de aventura, o programador vive um tir com a imaginação do jogador. Por

personagem parecido com este, poden exemplo, você poderia conceber um


do inventar, assim, seu próprio mundo monstro bem mais horripilante do que
Ao contrário de outros jogos, em seria capaz de reproduzir, mesmo nas te-
Masmorras e Dragões os jogadores não las gráficas mais avançadas. Portanto,
podem escolher as características de seus é bem possível que os gráficos "estra-
personagens; isso depende inteiramente guem" sua diversão: o principal argu-
do jogo. Em algumas versões mais sofis- mento contra a sua utilização é que eles
ticadas, os jogadores podem selecionar o desperdiçam grande parte da memória,
equipamento e os mantimentos que os que poderia ser usada para expandir o
personagens vão usar, desde que isso se- campo da aventura. Certas aventuras
ja feito no inicio do jogo, ames de co- apresentam uma contagem de pontos,
meçar a aventura. O primeiro jogo de sempre que uma etapa da busca é com-
aventura destinado a computadores foi pletada. Desse modo, o jogador pode
escrito para máquinas de grande porte, avaliar seu desempenho, caso lenha si-
em linguagem FORTRAN, e não em BA- do derrotado em algum estágio. Alguns pois da qual a aventura chega ao fim.
SIC. O programa ocupou aproximada- programas chegam ao ponto de classi- Alguns costumam durar muitas horas,
mente 300k de memória, ou seja, bem ficar esse desempenho com conceitos, ou dias, podendo ser interrompidos e re-
mais do que a memória RAM total da que podem ir de "palhaço" a "perito". tomados a qualquer momento.
maioria dos micros pessoais. Apesar do Outros jogos não fornecem qualquer
seu tamanho e complexidade, esse jogo dica de como o jogador está se saindo
UMA HISTÓRIA SEM FIM
conquistou milhares de usuários de com- ou da proximidade do desfecho.
putadores nos Estados Unidos e no Ca- Seja qual for o caso, porém, a diver-
nadá; eles passaram a dedicar suas noi- são maior está na solução de uma série Normalmente, quando se inicia uma
tes a tentar decifrar os mistérios do jogo. aparentemente infinita de charadas, de- do comando RUN, são
iventura através
IIIIIIIIIIIMH 9 nOGRAMAÇÃO Di JOGOS 9
IIIIIIIIIIIHH 9 PROGRAMAÇÃO DC JOGOS 9

Agora, você lem que decidir o que fa- tenças completas, mas isso é uma exce-
conveniente usar a colher pa-
zer. Será ção à regra. Esses tipos de jogos permi-
ra misturar o liquido ou mesmo experi- tem-lhe dizer algo como: MATE O
IN-
mentá-lo? Não seria melhor deixar isso SETO PISANDO NELE ENQUANTO Habitualmente, existe apenas uma
de lado? Ou talvez fosse preferível pro- CANTA "O TICO-TICO NO FUBÁ". solução para a aventura: por exemplo,
curar um recipiente para levar um pou- A maioria dos jogos de aventura con- encontrar um pote de ouro e levá-lo pa-
co do líquido verde com você? segue entender abreviaturas das palavras ra o fim do arco- Íris, ou matar um guer-
Se decidir usar a colher, digite algo válidas. muito comum,
Por exemplo, é reiro medieval e escapar ileso eic. Até
assim:PEGUE COLHER; a resposta do numa aventura, digitar N em vez de chegar a esse objetivo, o jogador preci-
computador será: OK ou VOCÊ AIN- NORTE. As direcões podem ser pontos sa resolver toda uma série de problemas.
DA NÃO PODE PEGAR A CO- — N, S, L e O — ou colaterais
cardeais O mais provável é que ele tenha que fa-
LHER!, ou alguma outra mensagem. — SE, SO, NE e NO — ou instruções
, zer muitas tentativas diferentes até con-
Em cada etapa do jogo você deve in- como PARA CIMA, PARA BAIXO. cluir a aventura.
formar ao computador exatamente o Um jogo típico de aventura é basea- Existem algumas regras básicas e di-
que pretende fazer. A forma de fazer is- do numa grade de locais possíveis, que cas que o ajudarão a resolver mais ra-
so dependerá apenas do tipo de jogo. A assume geralmente a forma de um qua- pidamente a maioria dos jogos. Quase
maioria deles espera você digitar seus drado. Dependendo da imaginação do todos os objetos que você encontrar nas
comandos no computador através de programador, esses lugares podem re- aventuras serão de alguma utilidade. A
um verbo seguido de substantivo; por presentar ambientes tão variados como existência de muitas pistas completa-
exemplo: PEGUE COLHER. os quartos de um castelo, os subterrâ- mente falsas representa um desperdício
\
Jogos mais sofisticados aceitam sen- neos de uma mina etc. de memória, embora seja necessário es-
9 PROGRAMAÇÃO Dl JOGOS 9

tar sempre alento para alguns objeios do problema, tente encontrar a respos- sivo, pois, se você for "morto", poderá
que podem ser "facas de dois gumes". ta consultando o livro. Um dicionário voltar atrás e continuar a partir do pon-
Por exemplo, o jogador poderia estar de sinónimos pode ser de grande utili- to em que parou.
carregando uma sacola com moedas de dade, permitindo que o jogador explo-
ouro para passar pelo pedágio de uma re todas as variações possíveis de uma
determinada frase. Por exemplo: o pro- CRIE AS SUAS PRÓPRIAS AVENTURAS
ponte; caso ele se decidisse a nadar no
rio, porém, o peso delas o faria afun- gramador pode terusado no jogo a pa-
dar. Como regra geral, é aconselhável lavra POLIR, em vez de LUSTRAR. A criação de aventuras é uma boa
tentar carregar o maior número possível Uma última dica: se o jogo permitir maneira de dominar a linguagem BA-
de objetos, mas algumas vezes apenas o uso do comando GRAVAR em algu- SIC. Quase todos os aspectos importan-
uma parte deles lhe será realmente útil. mas etapas, e você estiver prestes a en-
Quase sempre, a maioria dos objetos frentar um grande perigo, então arma-
é usada somente uma vez durante uma zene a aventura no estágio em que ela
aventura. Mas há exceçòes: uma espa- se encontra, antes de dar o passo deci-
da, por exemplo, poderia ser usada mui-
tas vezes para derrubar gigantes, dra-
gões ou bandidos. Dessa forma, se vo-
cê for obrigado a limitar o número de
objeios que leva consigo, deve ter em
mente que é mais seguro descartar os
que já foram usados uma vez.
Outra regra geral: desenhe sempre
um mapa. marcando nele os nomes dos
aposentos, a posição dos sentinelas e dos
objetos distribuídos pelos quartos, to-
das as entradas e saídas com suas dire-
eões e outros pontos de referência que
lhe possam ser úteis.
O
mapa o fará economizar tempo e
esforço quando você estiver retornando
para algum ponto anterior —
manobra
que você repetirá várias vezes durante
o jogo. Se liver que abandonar algum
objeio, por não poder carregar tudo,
não se esqueça de marcar a posição de-
le no mapa. A importância do mapa es-
tá em que ele lhe permitirá ter certeza
de que explorou todas as possibilidades
da aventura —o que, em muitos casos,
salvará sua "vida".
Certos jogos permitem que você pe-
va um inventário do que está carregan-
do. Assim, quando estiver diante de
uma charada, procure saber exatamen-
te o que tem em mãos, digitando IN-
VENTÁRIO, LISTA, ou algo seme-
lhante, dependendo da aventura.
Há jogos, ainda, que dão ao jogador
a possibilidade de pedir ajuda. A forma
de fazê-lo varia, mais uma vez, confor-
me o conteúdo da aventura. Frequente-
mente, porém, você obterá algo assim,
em resposta ao seu pedido:
NENHUMA AJUDA POSSÍVEL.
Alguns jogos seguem cuidadosamen-
te o enredo de um livro específico {por
exemplo, A Ilha do Tesouro, escrito em
1833 por Robert Louis Stevenson). Nes-
tes casos, é altamente recomendável ler
o livro em questão.
Outros jogos inspiram-se apenas em
alguns capítulos ou idéias de um roman-
ce famoso. Assim, se você encontrar nu-
ma aventura algum elemento que o fa-
ça recordar um texto literário e tiver di-
ficuldades para resolver um determina-,
IIIIIIIIIIIHE 9 PROORAMAÇiOOtJOOOS 9 ]H|||||||||||
tes dessa linguagem são utilizados nes- Além de livros, você pode inspirar- PRIKT [PEEK 23730 + 256" PEEK
se tipo de jogo: variáveis, matrizes, for- se em filmes, programas de TV e peças 23731) - (PEEK 23653 + 256*
matos de telas, cadeias alfanuméricas, teatrais, ou mesmo inventar novas his-
PEEK 23654)
comandos IF, e assim por diante. tórias. Pode também buscar idéias em O que foi digitado leva em conside-
Muitos jogos de aventuras à venda outras aventuras. Mas o melhor recur- ração tanto o espaço ocupado pelo pro-
ainda são escritos em BASIC, pois não so para sua inspiração é fazer trabalhar grama como o usado para armazenar as
há muita necessidade de velocidade de a imaginação. variáveis. A melhor contagem para des-
execução do programa. Ao mesmo tempo, procure alcançar cobrir a quantidade de memória restante
Antes de programar um jogo desse um certo equilíbrio entre o desafio c as só será possível, portanto, depois que o
género, você precisa ter uma idéia bem condições para vencê-lo. Não é conve- programa tiver sido rodado.
clara do que pretende fazer e do enredo niente criar uma aventura que qualquer Para saber quanto espaço está so-
da aventura. A seguir, planeje cuidado- um poderia resolver no espaço de meia brando, subtraia esse valor da quanti-
samente a trama com suas charadas, pe- hora. Em contrapartida, seu jogo não dade total de memória RAM
existente
rigos, objetos etc. deve apresentar problemas insolúveis. A no computador.
Para começar, pegue uma folha de regra básica é: "dê aos jogadores uma
papel e faça um rascunho de algumas chance"... mas não exagere.
ideias. Não se preocupe se ainda não Tente não deixar muitos aposentos
lem uma visão completa da ordem do ou locais vazios. Além de ocupar muito Nos microcomputadores das linhas
jogo: o que você precisa inicialmente é espaço de memoria, estes não contri- TRS-80 e TRS-Color, o que resta da me-
de uma noção do roteiro, do local da buem para a resolução dos problemas mória pode ser descoberto digitando-se:
aventura e de algumas charadas para o e tornam o enredo cansativo.
PRINT MEM
jogador resolver. Por outro lado, procure evitar que as
suas primeiras aventuras sejam excessi- Essa instrução levará cm conta o espaço
vamente complexas, para que os proble- ocupado pelo programa e pelas variáveis.
mas que aparecem ao longo da história Assim, é melhor rodai antes o programa,
possam ser resolvidos por quem ainda durante seu desenvolvimento (se isso for
não tem prálica; familiarize-secom o te- possível), a fim dc conseguir uma indica-
ma antes de aventurar-se em qualquer ção real do total de memória usado por ele
enredo extravagante; manicnha-se alerta Para saber quanto espaço está sobran-
quanto ao espaço restante de memória, do, subtraia esse valor da quantidade to-
pois programas como esses tendem a se tal de memória RAM existente no com-
Quanto espaço de memória tornar gigantescos. putador. Há uma maneira bem fácil de
to pafa escrever um jogo de aventura? No jogo de aventura que será elabo- seaumentar o espaço livre de memória
Nas próximas lições de INPUT de- rado nas próximas partes do curso de no TRS-Color para seus programas em
senvolveremos uma aventura simples, Programação fie jogos, encontraremos BASIC. Antes de começar a programar,
ocupando cerca de 5K de BASIC. Co- muitas declarações REM (comentários, digite esses dois comandos POKE:
mo todo primeiro passo, esse jogo não
para entender o fluxo do programa).
trará episódios de grande emoção. Seu
Entretanto, para economizar memória POKE 25,6
objetivo é apenas introduzi-lo ao mun-
em jogos com longas aventuras, é pre- POKE 26.1
do fascinante da aventura.
sem NEW
Os melhores jogos têm um grande ferível trabalhar tais declarações,
número de aposentos e charadas e são mesmo que no começo elas facilitem a Isso economizará uns 6K extras para
muito difíceis, devido ao efeito crés criação da trama. seu programa, pois enganará o compu-
cente de problemas cada vez mais Você poderá também poupar espaço tador, colocando o programa em BASIC
complicados. Com uma quantidade li- de memória na descrição dos aposentos. dentro de um espaço normalmente reser-
mitada de memória, você será forçado
Descrições muito curtas, porém, tendem vado para gráficos de alta resolução.
a determinar um número menor de pro-
blemas, que por sua vez serão mais di-
a estragar todo o prazer suscitado pela Neste caso os comandos POKE ex-
ffceis do que o normal. Isso. contudo,
aventura. cluem os comandos para gráficos na sua
não é muito satisfatório. aventura. Se eles existirem, o seu pro-
Um jogo como esse exige um com 0 ESPAÇO RESTANTE DE MEMORIA
grama será alterado.
putador com, no mínimo, 16K de me- Quando você armazenar o programa
mória; mas sugerimos uma máquina em fila ou disco e quiser carregá-lo mais
com 48 ou 64K para jogos realmente Ao escrever um longo jogo de aven- tarde, não se esqueça de usar ames os
desafiantes. tura, é fácil descobrir quando se está comandos POKE e NEW.
chegando ao limite de memória do com-
0 que devo fazer se cair numa ar-
madilha durante a aventura?
putador. Obviamente, os problemas de
desperdício de memória tornam-se mais
[ ^ || Ç^l f)^
Não desista; teme novamente quan-
do tiver uma nova idéia ou estratégia. graves no caso de máquinas com memó- Nos microcomputadores das linhas
Se você realmente empacar, os jo- rias menores (na verdade, seria perda de Apple e MSX, o que resta da memória
gos de aventuras comercializados ofe- tempo tentar escrever um programa de pode ser descoberto digitando-se:
recem um folheto com dicas e respos- aventura em um computador que tenha
tas. Muitas vezes, é preciso solicitar menos do que 16K de RAM). PRINT FBE(O)
peto correio um mapa da solução. A função KKE (abreviatura de EREe,
Outro recurso para ajudá-lo são as livre, em inglês) retorna o espaço li-
ou
revistas do género, que costumam
apontar a solução completa de aven-
vre na memória RAM, ou seja, aquele
turas complexas.
Digite a seguinte linha, não ocupado pelo programa e pelas va-
direio: riáveis.
IIIIIIIIIIIIHBI ' COOKODtMAQWM 9 ||||||||||

PROGRAMAS EM EXERCÍCIO EM ASSEMBLY


UM PROGRAMA QUE DESLOCA A
TELA PARA OS LADOS

CÓDIGO DE MÁQUINA COMO FUNCIONA 0 PROGRAMA


EM DIVERSOS COMPUTADORES

dentemente de suas posições na memó- ld de, 16384 11 00 40


Agora que você já sabe traduzir do
ria, de forma que você mesmo pode re-
ld hl, 16385 21 01 40
Assembly para o sistema hexa, ld b.192 06 CO
solver onde é melhor colocá-los. Para
loop puah bc C5
passe a operar com código de máquina. deslocar a tela mais de uma posição no
ld a. (de) IA
sentido horizontal, chame a rotina em ld bc.it 01 ir 00
código de máquina de dentro de um la- ldir ED 80
Os programas em Assembly apresen- ço FOR...NEXT. Outra opção é deslo- ldldel.a 12
tados a seguir deslocam a tela um carac- car a tela somente quando certa tecia é inc de 13
tere para a esquerda ou para a direita. pressionada, usando 1NKEYS ou GETS. inc hl 23
Monte-os na memória do micro usando pop bc Cl
djnz loop 10 F3
seu programa monitor. Se você quiser
ret C9
gravar programas para uso futuro, colo-
que-os em locais diferentes da memória. Este programa desloca a tela para a Os comandos ld de, 16384 e ld hl, I.
Os programas funcionam indepen- esquerda (já está traduzido). 16385 carregam os endereços das duas
IIIIIIIIIIHH! ' coomooimowNA 9 «|||||||||
primeiras posições da tela do Spectrum ciado primeiro caractere para a última do o registro de BC é reduzido a 0. A
nos registros DE e HL. Já td b,192 posição da linha é feita independente- última transferência é a da 32? posição,
transporta o registro B com o número mente. Assim, basta contar até 31. que passa para a 31.*. Nessa altura, o
192 (há 192 linhas na tela desse micro, A instrução mais poderosa aqui uti- conteúdo de BC é subtraído de e se 1

e B é usado para contá-las). lizada é Idir, que significa "carregar, so- torna 0, e o programa passa para a ins-
Como o regisiro B será usado para mar um e repetir" (-load, incremenr trução seguinte.
contar outras coisas também, seu con- and repeaí). Compreender o que ela faz O conteúdo do acumulador é trans-
teúdo ficará temporariamente armaze- é crucial para o entendimento do progra- ferido por Id (de), a para a posição cu-
nado na pilha (stack). Todavia, nenhum ma: o conteúdo da posição de memória jo endereço está em DE. O
acumulador
comando transfere apenas o conteúdo cujo endereço está em HL —
inicialmen- contém o código do caractere que ocu-
de B para a pilha: assim, temos que fa- te, 16385 —é transferido para a posição pava a primeira posição da memória de
zer essa transferência com o conteúdo de cujo endereço está em DE —
inicialmen- vídeo: 16384, endereço que estava em
B e C ao mesmo tempo usando push bc. te, 16384. A seguir, deve-se somar 1 aos DE antes de Idir começar a incrementar
O acumulador é então carregado com conteúdos de HL e DE, subtrair 1 do con- esse registro.
o conteúdo da posição de memória cu- teúdo de BC e verificar se o conteúdo de Esse processo de somar 1 ao conteú-
jo endereço está no registro DE, pelo co- BC foi reduzido a 0. Enquanto isso não do de DE foi executado sucessivamente
mando Id a (DE). Este é um exemplo de acontecer a instrução será repetida. desde então, e agora DE contém o en-
endereçamento indireto. Lembre-se de O que estava na segunda posição do dereço da última posição da primeira li-
que o conteúdo de DE é 16384. vídeo passa então para a primeira; o que nha. Este é justamente o local para on-
O comando Id bc, 31 carrega os re- estava na terceira posição vai para a se- de desejamos transferir o caractere que
gistros BC com o número 31. Cada li- gunda, e assim até que termine a primei- estava no inicio da linha.
nha tem 32 caracteres, mas a transferên- ra linha do vídeo, o que acontece quan- Os comandos inc hl e inc de somam

INC & FE""\


LDx i FE
IIIIIIIIIIHUH CÔMODiMAQUINA || ||||||||
1 aos registros HL e DE, de forma que Esse salto continua a ocorrer enquan- tando executar tudo o que encontra até
esies passam a comer os endereços das to o conteúdo de B vai sendo reduzido o final da memória. Chegando lá, ele re-
duas primeiras posições da linha seguin- de 192 até chegar a 0. O fato de esse va- torna ao início da memória onde encon-
te. Como o conteúdo da primeira posi- lor ser transferido temporariamente pa- tra as rotinas de inicialização do BASIC.
ção é transferido para o final da linha, ra a pilha não altera o funcionamento das Estas são executadas e a memória se
independentemente de Idir, devemos in- coisas. Desta forma, uma linha é deslo- apaga.
crementar o valor desses registros dz cada de cada vez. Quando B finalmente Tente traduzir para código de máqui-
mesma forma. contém o valor 0, após a última subtra- na e introduzir em seu micro a seguinte
O antigo conteúdo de BC é recupe- ção feita por djnz, não ocorre salto, e o rotina Assembly.
rado da pilha pelo comando pop bc. O programa passa a instrução seguinte.
comando djnz subtrai 1 ao valor de B O comando ret significa retorne. Ne- ld de, 22527
e "pula" sucessivamente para outros lo- nhuma rotina em código de máquina ld hl, 22526
cais do programa, até que esse valor se funcionará direito sem uma instrução ld b.192
iguale a 0 ( = decrettient and ju/up ifnot desse tipo no final. O microprocessador loop puah bc
tentará executar qualquer coisa que es- ld a, (de)
zero). No início do programa, carrega-
ld bc,31
mos o registro B com 192. Esse valor fi- teja após es códigos de seu programa.
lddr
ca armazenado temporariamente na pi- O conteúdo dessa parte da memória ge- ld (de) ,a
lha para liberar o uso de BC. O coman- ralmente não faz sentido, e o mais co- dec hl
do djnz subtrai 1 a esse valor, que pas- mum é a perda de controle do compu-
sa a ser 191 (valor diferente de 0). As- tador e do conteúdo da memória. pop bc
sim, a instrução volia para a primeira Mesmo quando isso não ocorre, o djnz loop
ocorrência do rótulo loop. microprocessador continua lendo e ten- ret
CÓDIGO Dl MAQUI: Illlllllll
Illlllllll

Esse programa começa pelo final da O programa a seguir desloca a tela 0 PROGRAMA NO ZX-81
memória de vídeo e vai transferindo os para a esquerda no ZX-81 com expan-
conteúdos das linhas "de trás para a são de memória. Ele já está traduzido
frente". A diferença entre ele e o ante- do Assembly para código de máquina. A memória de vídeo do ZX-81 não
rior é o uso da instrução Iddr, que trans- tem posição fixa; as posições 16396 e
fere o caractere da posição cujo ende- 16397 contêm o endereço da primeira
LD DE, (16396) ED 5B 0C 40 posição do vídeo. A instrução LDDE,
reço está em HL para a posição de en-
INC DE 13
dereço em DE, subtraindo 1 aos conteú- LD H.D 62
( = 16396) carrega os registros D e E com
dos de HL, DE e BC e repetindo o pro- LD L,E 6B os valores contidos em 16396 e 16397 —
cesso até que o valor em BC seja redu- INC H L , 23 o conteúdo de 6396 vai para E, e o ou-
1

zido a 0. O comando Iddr transfere blo- LD I .24 tro vai para D, seguindo a convenção
cos de memória em sentido contrário a LOOP PUSH BC "baixo-alto" do Z-80. Agora, o progra-
Idir. LD A, (DE) ma sabe onde está a memória de vídeo.
O salto é do mesmo tamanho que no LD BC, 31 Esse micro conta com um caractere
programa anterior. Verifique se calcu- LDXR de retorno de carro (NEW LINE) no ini-
lou seu valor corretamente, olhando a LD (DE) .A cio de cada linha que não aparece na te-
INC HL
listagem (conte os bytes a partir do fi- la. Sua função é economizar o espaço
INC HL
nal da instrução de salto, ou seja, in- INC DE ocupado pelo vídeo. Se a tela estiver va-
cluindo o byte cujo valor está sendo cal- INC DE zia, a memória usada pelo vídeo corres-
culado). POP BC ponderá aos 24 caracteres NEW
LINE.
DJNZ LOOP que marcam onde cada linha deve
RET começar.

1NY BNE-OOI
STa(ífs)y LPYf*<
LDA&F
3>EY STApFf
CPSfXFF
ADCf* S
1 A
3 DC MÁQUINA 9 llllllllll

Quando usada uma expansão, es-


é comandos INC HL e INC DE que, no DEC DE
caracteres ficam no final de cada li- ZX-81, somam a esses registros. Isso DEC DE
ses 1

uma vez para mover o programa P0P BC


nha. Não devemos interferir nessa or- é feito
DJNZ LOOP
ganização. para a linha seguinte e uma segunda vez
El ET
Tal organização é responsável pelas para evitar interferências da linha.
diferenças entre os programas do ZX-8 Agora, tente obter os códigos hexa- Esse exemplo é parecido com o se-
e os do Spectrum (leia com atenção a decimais correspondentes ao seguinte gundo programa apresentado para o
descrição do programa do Spectrum). programa em Assembly, que desloca a Spectrum. As diferenças entre eles são
O primeiro caractere do vídeo é um tela para a direita. as mesmas que encontramos antes.
NEW LINE. Como não devemos alterá- LD HL, (16396)
lo,a instrução INC DE soma 1 ao con- LD DE, 790
teúdo de DE, que se torna então o en- ADD HL. DE
dereço da segunda posição do vídeo. LD D,H A organização da memória de vídeo
As instruções LD H.D e LD L.E co- LD E.L do MSX é bem diferente da que existe em
piam o conteúdo do par DE no par de INC DE outras máquinas. Esse computador uti-

registros HL. INC HL soma a HL,


1
LD B.24 liza um microprocessador diferente da
LOOP PUSH BC CPU para controlar a tela, dispondo de
que passa o endereço da tercei-
a conter
LD A, (DE) RAM
ra posição do vídeo. LD B,24 carrega o LD BC. 31
16K que não estão na para utili-
registro B com o número de linhas da LDDR zar como memória de vídeo. Desta for-
tela do ZX-8 O restante do programa
1 .
LD (DE) ,
ma, essa porção da memória c tratada co-
funciona de maneira idêntica à do Spec- DEC HL mo dispositivo periférico, e o acesso a ela
trum. A única diferença é o número de DEC KL não é tão fácil quanto o acesso à RAM.
Isso significa que nào podemos usar jrnz.loop 20 F9 riférico tem um número desse tipo.
o comando ld para colocar ou ler um ca- ret C9 Escolhemos os endereços de - 7936
ractere na memória de vídeo. O coman- a - 6976 (57600 a 58560; o computador
do Assembly utilizado para enviar da- Para fazé-las funcionar, digite ainda não reconhece inteiros acima de 32768
dos a um dispositivo periférico é o out. o seguinte programa em BASIC: em código de máquina) para colocarmos
Quando memória de vídeo de um
a a nossa "memória de vídeo" na RAM.
computador está na RAM, podemos fa- 1000 SCREEN 0 Assim, o primeiro endereço dessa me-
cilmente situar um caractere em qual- 1005 DEF USH1--8192 mória c colocado no registro HL por
1007 DEF USR3--8155 Idhl, -7936.
quer posição vertical ou horizontal. Se
1010 FOR 1-0 TO 960
a tela for tratada como um dispositivo 1020 VPOKE BASE[0)+I,RND(1)*256 O valor 4 é colocado no acumulador
periférico, contudo, a instrução oul sim- 1030 NEXT I pelo comando ld a, 4. O mesmo é feito
plesmente colocará os caracteres na mes- 1040 VPOKE BASE (0) 32.X-USR1 (0)
,
com 240 no registro B, por ld b,240. A
ma ordem em que forem enviados, a 1050 CLS:F0R 1-1 TO 1000:N£XT I e B funcionam como contadores.
partir da posição do cursor. 1060 VPOKE BASE(O) 32 X-USR3 (0)
, : A instrução inir é a mais importante
Temos, então, dois problemas: para 1080 GOTO 10B0 do programa. Ela coloca o valor lido na
controlar a posição do cursor, necessi- porta cujo número está em C na posi-
tamos de sub-rotinas da ROM; além dis- Os possíveis erros podem «er corrigi- ção de memória cujo endereço está em
so, os 16K da memória de vídeo têm dos por meio do monitor. Para possibi- HL. A seguir, a mesma instrução soma
uma organização complicada, que varia litar isso, o programa em BASIC come- 1 ao conteúdo de HL e subtrai I a B.
conforme o tipo de tela selecionada, per- ça na linha 1000, acima do monitor. Se Se o conteúdo de B não for 0, todo o
mitindo a exibição de caracteres, cores não apagarmos o programa monitor, processo será repetido (i/ipttt, increment
e sprites. poderemos rodar o novo programa com and repeal). Quando o conteúdo de B
Enquanto não aprendemos como RUN 1000. se torna 0, o programa passa à instru-
funcionam as sub-rotinas da ROM e a devem ser
As duas rotinas fornecidas ção seguinte.
organização da memória de vídeo, va- chamadas de um programa em BASIC. A instrução dec a subtrai 1 ao valor
mos usar um artificio que dê ao MSX São especialmente importantes os co- em A. Se, após essa operação, o conteú-
uma "memória de vídeo" na RAM, cu- mandos VPOKE das linhas 1020 e 1040, do de A for diferente de 0, jrnz desvia-
jo acesso é bem mais fácil. Isso é feito que posicionam o cursor no inicia da te- rá o curso do programa para a primeira
pelas duas rotinas que se seguem. la para que ela possa ser lida pela roti- ocorrência do rótulo loop jump re- (

A primeira copia os 960 caracteres da na L'SR1 e escrita pela rotina USR2. lafive tf not zero). Isso fará com que o
tela de textos de 40 colunas, no topo da Agora, você pode montar a rotina de processo de ler 240 caracteres na porta
memória, onde esta é manipulada de deslocamento horizontal propriamente 1 52 seja repetido. Caso o valor cm A se-
maneira semelhante ã dos outros mi- dita. Ela é parecida com as rotinas dos ja reduzido a zero, o salto não ocorre-
cros.A segunda copia os caracteres da outros micros que usam o Z-80. Não rá, e o programa passará então à instru-
"memória de vídeo" da RAM para a apague as duas rotinas anteriores. Uti- ção seguinte.
verdadeira memória de vídeo do MSX, lize o endereço inicial -81Í2. O comando rei faz com que a rotina
que é um dispositivo periférico. retorne ao BASIC.
ld de. -7935 11 01 El Em resumo, esse programa transfere
Embora todas as rotinas apresenta-
ld hl, -7934 21 02 El
das funcionem independentemente de os primeiros 960 caracteres da tela, a
ld b,21 06 18
sua localização na memória, daremos loop push bc C5 partir da posição do cursor.
exemplos utilizando endereços. ld a, tde) IA Ele faz isto repetindo quatro vezes a
Proteja o topo da memória do MSX ld bc,39 01 27 00 leitura e transferência de 240 caracteres
para colocar os programas e a "memó- ldir ED BO (4x240=960).
ria de vídeo" ( = use CLEAR 200, ld (de) ,a 12 A segunda rotina é essencialmente
&HDFFF). A seguir, carregue os pro- inc de 13 igual à primeira; apenas, trocamos o co-
gramas usando o monitor. Utilize os en- /T") Inc hl ^ jt—v 23
0 mando inir por outir (-output, incre-
dereços iniciais -8192e -8155 para a ff § pop bc/Ç>~», \_ I Cl
ment and repeal) que, em vez de ler na
primeira e a segunda rotinas, respecti-
djnz looP^l-P /foj P3 porta 152, envia para esse dispositivo os
vamente. 960 caracteres que estavam no topo da
Para vê-la funcionando, acrescente memória.
ainda as seguintes linhas ao programa A terceira rotina é, com algumas mo-
ld c,152 0E 98 em BASIC apresentado anteriormente: dificações, a mesma utilizada para o
ld hl, -7936 00 El Spectrum. Ela age sobre a "memória de
ld a. 4
21
3E 04 1006 DEF USH2 8112 — vídeo" na RAM e, para funcionar, deve
b,240 06 F0 1035 FOH 1-1 TO 1000
1050 A-USR2 (0) ser usada juntamente com as rotinas an-
loop inir ED B2 teriores. Leia atentamente a explicação
dec Vr-" 1070 NEXT I
1 3D do programa do Spectrum.
jrnz.loop 20 F9
ret C9 As únicas diferenças são os endereços
COMO FUNCIONAM OS PROGRAMAS
iniciais da memória de vídeo (—7935 e
- 7934), o número de linhas da tela (24)
A primeira rotina transfere os 960 ca- e o número de caracteres por linha, me-
ld c.152 0E 96
ld hl. -7935 21 01 El
racteres da teia de 40 colunas para o to- nos 1 (39). O
restante 6 exatamente igual.

ld 1,4 3E 04 po da memória. O comando ld c,152 co- Tente então traduzir o programa que
loca o valor 152 no registro C. Este é o faz. deslocamento horizontal da tela pa-
ld b,240 06 F0
loop outlr ED B3 número da "porta" correspondente á ra a direita, do Assembly para código de
dec a 3D memória de vídeo. Todo dispositivo pe- máquina. Para rodá-lo, serão necessárias
IIIIIIIIIIIHH lllllllll
as rotinas iniciais, bem como um progra- ld de, 16383 no endereço situado duas posições an-
ma em BASIC. ld hl, 16382 tes do conteúdo de X. Isso fica uma po-
ld b.16 sição à esquerda de onde esse caractere
ld de, -6976 loop push bc foi retirado, já que X foi incrementado
ld hl. -6977 ld a, (de)
depois.
ld b,24 ld bc.63 DECB
lddr
A instrução ao
subtrai 1 con-
loop push bc teúdo de B, diminuindo esse valor de 31
ld a. (de) ld (de),
dec \1 até 0. Essa operação afeta o sinalizador
ld bc,39
0 (ou fiag zero), de forma que um resul-
lddr
ld (de), tado 0 em qualquer operação estabelece
djnz loop esse sinalizador. BNE verifica se o sina-
lizador foi estabelecido. Caso isto não te-
nha ocorrido, o curso do programa so-
frerá um desvio. JUMP é o rótulo (la-
Dirija-sc à seção do Spectn hel). de forma que o programa salta até

O O TRS-80 já vem com um monitor.


comentários.

ii
a instrução LDA.X + e desloca para a
esquerda o caractere seguinte, até chegar
ao final da linha. Quando isso acome-
ce, DECB reduz o conteúdo do registro

Se seu sistema não tem unidade de disco, Este programa desloca a tela para a B a 0 e o sinalizador é estabelecido. Ago-
responda N à pereunta inicial do compu- esquerda. Já foi traduzido do Assembly ra, o salto não ocorre mais, e o progra-

tador: BASIC (S/N)? Entramos, assim, para linguagem de máquina. Ele não ma passa à instrução seguinte a BNE.
no monitor. Para aprender os comandos funciona em sistemas com disquete. O comando PULS B recupera o va-
específicos, consulte seu manual. lor no topo da pilha, colocando-o em B.
LDXI1024 8E 04 00 STB - 1.X faz com que o conteúdo de
Caso seu sistema tenha unidade de LDB,X+ E6 80
disco, pressione simultaneamente PSH5 B 34 04
B seja armazenado uma posição atrás do
BREAK e RESET, liberando a última te- LDBI31 C6 1F endereço em X. Esta é a última posição
cla primeiro. Desse modo, o sistema se LDA X*, A6 80 da linha; o primeiro caractere é então re-
comportará como se não houvesse uni- STA-2.X A7 1E cuperado da pilha. Assim, a linha é to-
dade de disco. DECB 5A da deslocada para a esquerda, e seu fi-
O programa montado com o moni- BNE JUMP 26 F9 nal passa a ser ocupado pelo primeiro
PULS B 35 04 caractere.
tor permanecerá na memória, não sen-
do apagado nem pelo DOS nem pela te-
STB-l.X E7 1F A instrução CMPX» 1536 compara o
CMPXI1536 8C 06 00 endereço em X com 1536, que é o últi-
cla RESET, nem pelo BASIC, se for da-
BLO LOOP 25 EA
da uma resposta adequada à pergunta RTS 39
mo endereço da memória de video. BLO
"Memória Usada?" (resposta adequada desviará o programa se o conteúdo de
é um endereço inferior ao do programa COMO FUNCIONA 0 PROGRAMA
X for menor que 1536 (Branch i/LOwer
montado). thatt). Loop é o rótulo, de forma que. se

A rotina que se segue desloca a tela o programa não deslocar toda a tela,
um caractere para a esquerda. A memória de vídeo do computador chegando ao seu endereço final, o pro-
começa no endereço 1024; assim. LDX grama saltará para a instrução LDB.X +
ld de. 15360 11 00 3C
#1024 carrega este valor no registro X. ecomeçará a deslocar a linha seguinte.
ld hl. 15361 21 01 3C
ld b,16 06 10 LDB.X + carrega o acumulador B com Se o registro X contiver 1536, o pro-

loop puah bc C5 0 conteúdo da posição de memória cu- grama terá deslocado toda a tela, e a ins-

ld s, (de) IA jo endereço está em X. A seguir, soma trução seguinte será executada.


ld bc,63 01 3F 00 1 ao conteúdo desse registro. PSHB ar- O
comando RTS retorna ao BASIC.
mazena temporariamente na pilha o Toda rotina em linguagem de máquina
conteúdo do acumulador B que é o — deve terminar com essa instrução. Se is-
código do primeiro caractere do video. so não ocorrer, o microprocessador ten-
O comando L1)B#31 carrega B com tará executar qualquer comando que es-
o número 31. Esse registro é usado co-. teja após o seu programa.
mó contador, Embora existam 32 carac- O
programa seguinte desloca a leia
terespor linha, a operação de deslocar para a direita. Traduza os mnemónicos
cada caractere uma posição para a es- Assembly para código de máquina tos
querda será feita 31 vezes. A transferên- endereços estão em decimal e devem ser
cia do primeiro caractere da linha para convertidos para hexa).
Este é essencialmente o mesmo pro- a última posição é feita separadamente,
grama fornecido para o Spectrum. Mas depois que o resto da linha é deslocado LDXI1536
para a esquerda. LOOP LDB.-X
existem algumas diferenças.
PSHS B
São elas: o endereço inicial da memó- O comando LDA.X + carrega o acu- LDB|31
ria de video, que é 15360 no TRS; o nú- mulador A com o conteúdo do endere- JUMP LDA.-X
mero de linhas da tela (16) e o número ço que está em X; esse endereço está uma STA 1,X
de caracteres por linha (64). Os coman- posição à frente do endereço carregado DECB
dos são, portanto, idênticos, em B, pois foi somado a X. Depois dis-
I BNE JUMP
A
rotina a seguir desloca a teta para so, a instrução soma 1 a X novamente. PULS B
a direita. STA-2.X armazena o conteúdo de A STB.X
7 ,

IIIIIIIIIIIHHHM^^^HHHIIIIIIIIIII!
CKPXI1024 CPY »S2B CO 28 repetição do comando 1NY, apontando
BGT LOOP BNE LOOP DO F5 assim para a próxima posição da tela
BTS LDV |S 2 AO 27 CPY #$28compara o conteúdo de Y com
LDA SFD AS PD
Este programa trabalha no sentido in-
STA (SFB) 91 FB
28 em hexa. ou 40 em decimal, que é o
verso ao anterior, começando pelo fim
RET 60 total de caracteres por linha. BNE
da memória de vídeo (1536). Ele deslo- LOOP verifica o sinalizador 0. Se ele
ca as linhas da tela para a direita, até Use ainda este programa em BASIC: não for estabelecido, o microprocessa-
chegar ao endereço 1024. Na realidade, 5 HOME dor voltará para o endereço rotulado por
1536 é uma posição posterior ao final da 10 FOB I - 1 TO 40 LOOP e continuará de lá.
tela, mas o pós-byle, —X, subtrai 1 ao 20 VTAB 1: PRINT CHBS (64 + I O
comando BNE envia o programa
conteúdo do registro X após a execução de volta a LOOP até que Y acabe de con-
da instrução LDX. Assim, se LDB, -X NEXT tar de 0 a 40, movendo os caracteres da
carregar B com o conteúdo da última FOR I - 1 linha para a esquerda. Quando o con-
posição da tela, o programa deverá co- CALL 800 teúdo de Y chega a 40, a condição de
meçar com um endereço que está uma NEXT BNE não è satisfeita e o microprocessa-
posição na frente, dentro do registro X.
GOTO 70 dor continua na instrução seguinte.
Com exceção desse detalhe, o progra- A instrução LDY#$27carrega Ycom
ma funciona de maneira idêntica ao an- 27 hexa, ou 39 decimal. LDA SFD car-
terior (confira o tamanho dos saltos que rega o acumulador com o conteúdo da
calcular, consultando a listagem). posição de memória OOFD.
O comando LDA #$0(1 carrega 0 no Já o comando STA ($FB>,Y coloca o
acumulador, e STA SFB coloca esse va- conteúdo do acumulador no endereço
lor no endereço 0020. Analogamente. dado por OOFB e 00FC, mais o desloca-
O Apple já vem com um monitor.
II LDA # $04 e STA $ FC colocam 04 em mento em Y. Ele posiciona o primeiro
Para entrar, digite CALL- 151. Os co- 0OFC. Não há um comando único que caractere da linha na posição 0427, que
mandos específicos estão no manual do armazene valores diretamente na é a Ultima da primeira linha de texto.
computador. Para usar as rotinas em memória. A instrução RTS diz ao microproces-
seus programas BASIC, basta acionar o O endereço da primeira posição da sador para voltar ao BASIC. Qualquer
comando CALL N, onde Néo endere- memória de vídeo do Apple é 0400 (em rotina em linguagem de máquina tem
ço inicial da rotina em código. A orga- hexa). 00FB e O0FC são posições da pá- que terminar com RTS, caso contrário
nização da memória de vídeo do Apple gina 0 da memória. As posições dessa o microprocessador seguirá memória
II abriga duas páginas de vídeo com di- página requerem somente um byie no afora, tentando executar qualquer coisa
ferentes modos de utilização, além de seu endereçamento. LDA #$00 e STA que houver no caminho. O programa se-
uma página de texto. A maior compli- SFE colocam 0 em OOFE, posição que guinte desloca a primeira iinha de vídeo
cação, porém, é a diferença na ordem em será usada como contador. para a direita. Tente calcular os códigos
que as linhas de texto ou de pontos são A instrução LDY #$00 carrega o correspondentes.
representadas na tela e na memória. A registro-indice Y com o deslocamento
segunda linha de texto na tela, por exem- (ou seja, 0, pois o programa tem que co- LDA «soo
STA SFB
plo, não é o segundo conjunto de 40 meçar no inicio da tela), LDA (FB),Y
LDA #S04
bytes da memória de vídeo. carrega o acumulador com o conteúdo STA SFC
Assim, para não tornar muilo com- da posição de memória cujo endereço LDA • soo
plicado este primeiro programa em As- está cm 00FB e 0OFC, mais um desloca- STA SFE
sembly para o Apple 11, fizemos com mento provocado pelo número que está LDY IS27
que ele deslocasse para a esquerda so- em Y. 00FB e 0OFC apontam para a po- LDA (SFB)
mente a primeira linha de vídeo. sição 0400. início da tela de textos. As- STA SFD
Este programa não funcionará no sim, essa instrução posiciona o primei- LDY • S26

TK-2000. Todavia, os usuários desse mi- ro caractere no acumulador. STA $FD LOOP LDA (SFB)
cro não precisam aprender a montar pro-
INY
o coloca na posição O0FD.
STA (SFB)
gramas a mão, uma vez que dispõem do A seguir, LDY #$01 carrega o registro DEY
mini-Assembler. Use o endereço inicial Y com I. LDA
($FB),Y carrega o acu- DEY
hexa 320 (800 em decimal). mulador com o conteúdo da posição de CPY ISFF
endereço dado por OOFB e 00FC, mais BNE LOOP
LDA i soo A9 00 um deslocamento provocado por Y. Des- LDY tsoo
STA SFB SS FB ta vez, contudo, Y contém 1 em vez de LDA SFD
LDA #$04 A9 04 0. Assim, essa instrução põe no acumu- STA (SFB)
STA SFÇ 85 FC lador o caractere da posição 0401.
HET
LDA IS00 A9 00 A instrução DEY subtrai ao regis- 1 Uslc programa opera da mesma for-
STA SFE 85 FE tro Y, e STA ($FB),Y coloca o caractere ma que o anterior, exceto que somamos
LDY IS00 AO 00 cujo código está em A na posição dada onde subtraímos e vtee-versa, para que
LDA (SFB).Y BI FB
por OOFB e 0OFC, mais o deslocamento o deslocamento seja feito no sentido
STA SFD 85 FD
LDY *S01 AO 01 em Y. Como Y foi diminuído de 1 nesse inverso.
LOOP LDA fSFB) .Tf BI FB processo, ele tem como resultado a trans- Os saltos são do mesmo tamanho, de
DEY 88 ferência de cada caractere para uma po- forma que os valores calculados podem
STA (SFB) ,Y 91 FB sição à esquerda. ser verificadosna outra listagem (o sal-
IHY O registro Y tem duas vezes soma-
1 to incluio final da instrução BNE, ou
vn do ao seu conteúdo por intermédio da o byte que contêm seu tamanho).
seja,
iiimiHiM— ——miiihm 0 QUE É PROGRAMAÇÃO
ESTRUTURADA?
OS FLUXOGRAMAS
COMO ESTRUTURAR
PROGRAMAS EM BASIC

um programa uma programa, antes de começar a digitá-lo. 3. Série de módulos


A estruturação de é
Comece por escrever o que pretende que
técnica que facilita a compreensão de o computador faça, de um modo bem
seu funcionamento e permite tornar geral. Por exemplo:

mais eficiente e simples sua operação.


Sistema de indexação
Aprenda a utilizá-la em BASIC.
O programa tem por objetivo proces-
sar em memória registros que poderão
O interpretador BASIC padrão, dis- ser criados, atualizados, apagados, clas-

ponível na maioria dos micros, é simples sificados e listados. Os registros serão


de usar, mas possui poucas estruturas de acessíveis por meio da utilização de uma
programação, o que dificulta a elabo-
ração de programas estruturados.
As estruturas são "blocos de constru-
ção" da lógica de um programa, e são
utilizadas para proporcionar-lhe uma
forma coerente e de fácil compreensão.
No BASIC padrão, as principais estru-
turas deprogramação lógica são repre-
sentadas pelas declarações IF...THEN,
FOR...NEXT, GOTO
e GOSUB. Já vi-
mos como empregar individualmente a
maioria delas; examinaremos agora co-
mo colocá-las juntas de uma maneira le-
gível e ordenada.
Em programas curtos, a estruturação
não é uma questão muito importante.
O problema aparece quando se preten-
de elaborar um programa longo e com-
plexo, do ponto de vista lógico (desvios).
Nesse caso, se você escrever uma parte
do programa e depois acrescentar mais
e mais coisas a ele, provavelmente aca-
bará se perdendo.
Para evitar que isso aconteça, haW"-
tue-se a projetar detalhadamente seu

. Sistema de indexação
ROGRAMACAC

paíavra-chave. Todo o conjunto de re- computador reside exatamente em sua muito importante para a programação
gistros poderá ser armazenado e carre- habilidade de fazer escolhas. A familiar estruturada, auxilia bastante a testar e
gado em um arquivo. declaração IF...THEN é a estrutura a eliminar as falhas.
mais frequentemente utilizada para isso, Nem todas as versões em BASIC, po-
Esle primeiro passo é conhecido co- na linguagem BASIC. Vamos agora exa- rém, possuem a partícula ELSE — ela
mo especificação do sistema. O passo se- minar sua representação e a de outros não está disponível, por exemplo, nos
guinte consistirá em dividir as especifi- tipos de estrutura em um ftuxograma. computadores Spectrum, ZX-81, Apple
cações gerais, acima, em etapas lógicas ou TK-2000. Nesses casos, para evitar
oumódulos.Estes,porsuavez,também le- que a estrutura passe a ter mais de uma
rão suas funçõesespecificadas de manei- saída, o ELSE pode ser simulado
As operações envolvidas em ca-
ra geral. utilizando-se o GOTO:
da módulo provavelmente serão muito 100 ...
complicadas; assim, divida-as em seções 110 IF condição THEN COTO 140
sucessivamente menores, até obter mó- 120 declaração 2
dulos tão pequenos que possam ser tra- 130 GOTO 150
tados de forma simples. A figura 1 140 declaração 1
tra como isso pode ser feito para o nos-
150 ...

so sistema de indexação. É claro que os números das linhas


Cada uma das seções (ou módulos) não precisam ser iguais aos do exemplo.
menores não deverá ter, em extensão, Além disso, pode-se incluir mais de uma
mais do que uma página de programa, declaração nas partículas THEN e EL-
ou seja, cerca de 60 linhas. O ideal, po- SE. Veja, a seguir, uma seção de progra-
rém, será limitá-las à metade des- ma para classificar dois números den-
VÍWADeiHA
te tamanho. Eventualmente, tro de determinada ordem. Ela consti
elas terminarão constituindo tui a base para uma rotina de classifica-
sub-rotinas do seu pro- ção alfabética que será dada adiante. No
grama. caso específico, a partícula ELSE pos-
Esse método de suí quatro declarações:
subdividir um pro-
blema é conhecido |ToO IF prmeiroOsegundo THEN
GOTO
160
como modelo de 110 LET temporar 10-pr imei ro
cima para baixo 120 LET prmeiro-Heoundo
ftop-down). Come- 130 LET seoundo-temporario
ça-se do alto (ou 140 LET ordeinS"" errado"
seja, da descrição
geral do programa) e avan-
ça-se até embaixo (isto é, o
nível mais baixo de.módu-
los). Até aqui, entretanto, o
programador ainda não de-
cidiu em que ordem os mó-
dulos serão executados.
Esta será a próxima etapa.

Embora os diversos computadores


utilizem de maneira diferente a declara-
ção IF... THEN. ..ELSE, ela é sempre a
A ordem (ou lógica) de execução dos base da tomada de decisões dentro de
módulos de um programa pode ser es- um programa. Representada no flu-

pecificada por meio dos diagramas de xograma por um losango (veja figu-
blocos ou fluxogramas. O uso destes ra 4), esta declaração é escrita em
permite que se ordene o programa de BASIC da seguinte maneira:
uma maneira bem estruturada e clara.
100 IF condição THEN
Para isto, basta seguir um conjunto sim- declaração 1 ELSE
ples de regras. declaração 2.
A figura 2 mostra como especificar
um módulo. O programa acompanha as Ou seja: se a condição for
linhas na direção das flechas e os retân- verdadeira, será executada a
gulos descrevem o que acontece em ca- declaração I; caso contrário,
da estágio. Se quiser executar uma série a declaração 2.
de módulos em sequência, acrescente Note que, no fluxograma,
mais retângulos na ordem correta, en- só há um ponto de saída para
tre o início e o fim (veja a figura 3). a estrutura IF... THEN... EL-
Um fluxograma como este é ideal pa- SE. De fato, cada seção de có-
ra um programa no qual nenhuma de- digo deve ter apenas uma en-
cisão é tomada. No entanto, o poder do trada e uma saída. Esta regra.
" " " .

IIIIIIIIIIHH » <*0G*AMCÀOm,C ,5 INIIIIIIHIII


100 IF T10T2 THEK GOTO 130 A introdução de linhas em branco em
110 PRINT "EMPATOU !
diferentes seções e a utilização de decla-
120 GOTO 190 rações REM
constituem outras manei-
130 IF TKT2 THEN GOTO 170 ras de tornar mais clara a estrutura de
Esla seção também pode ser escrita
140 PRINT"0 JOGADOR 1 GANHA" um programa. Para entrar as linhas em
utilizando-se o ELSE, mas ele deverá es- 150 LET Pl-Pl+1 branco nos computadores Spectrum,
tar totalmente contido em apenas uma 160 GOTO 190
basta digitar o número da linha seguida
linha. As declarações múltiplas serão 170 PRINT"0 JOGADOR 2 GANHA"
180 LET P2-P2+1 de um espaço e, em seguida, pressionar
permitidas desde que estejam separadas
por dois pontos: 190 ... <ENTER> ou < RETURN > Ao es- .

crever programas no TRS-80, TRS-


100 IF pr me ro':> segundo
i 1 THEN Todas as estruturas podem ser embu- Color ou MSX, você poderá obter um
temperar io=primeiro : tidas em qualquer combinação e, na teo- efeito semelhante digitando um apóstro-
primeircsegundo segundo»
: ria,em qualquer profundidade. No en- fo ('), ao invés de dar o espaço.
temporar 10 ordemS= "errado
:
tanto, quanto mais você as embute, me-
ELSE ordemS="certo" nos legível se torna o programa; assim,
Não é fácil ler ou entender programas é razoável estabelecer um limite de pro-
que utilizam declarações longas como fundidade de três ou quatro estruturas.
esta —
assim, sempre que possível, deve- Se precisar embutir mais estruturas, sub- Outra declaração importante em pro-
se evitá-las. divida o programa em módulos ou sub- gramação estruturada é a WHILE...DO,
Finalmente, em alguns casos, não se- rotinas menores. que permite a repetição em um progra-
rá necessário usar partícula ELSE. O Examinando o último programa, vo- ma e é um dos recursos mais úteis para
fluxograma se parecerá com o da figu- cê observará que é difícil acompanhá-lo, se criar um laço. Esta declaração diz ao
ra 5 e será redigido desta maneira: ainda que esteja perfeitamente estrutu- computador que faça (DO) repetida-
rado. Uma maneira prática de tornar mente uma coisa enquanto (WHILE)
100 IF condição THEN declara- uma certa condição for verdadeira. Se
mais legíveis as declarações embutidas é
ção.
recuar (indentar) as linhas do programa. computador não possui as palavras
seu
que é, simplesmente, a própria declara- Isso só é viável nos computadores das li- WHILE e DO, você pode inventar uma
ção IF...THEN. nhas TRS-80, TRS-Color, Spectrum e estrutura que faça a mesma coisa, utili-
MSX; neles, você poderá reescrever o úl- zando IF...THEN eGOTO. A redação,
ESTRUTURAS EMBUTIDAS timo programa da forma que se segue: em BASIC, é a seguinte (veja o fluxo-
grama correspondente na figura 6):
É possível embutir uma linha IF... 100 IF T10T2 THEN GOTO 130 100 . .

THEN...ELSE dentro de outra declaração 110 PRINT- EMPATOU !

110 IF NOT condição THEN GOTO


IF...THEN...ELSE. Ou seja, a consequên-
120 GOTO 190 140
130 IF TKT2 THEN GOTO 170 120 declaração
cia de um THEN ou de um ELSE tam- 140 PRINT-0 JOGADOR 1 GANHA*
bém poderá ser um outro IF, e assim por 130 GOTO 110
150 LET Pl-Pl+1 140 ...
diante. É o caso da seção de programa 160 GOTO 190
abaixo, que executa a contagem de quan- 170 PRINT-0 JOGADOH 2 GANHA" Note que a linha 100 lê a condição IF
tas partidas dois jogadores ganharam e 160 LET P2-P2+1 NOT..., ou seja. verifica se a condição
imprime os resultados após cada jogo: 190 ... não é verdadeira. O procedimento é
oposto do normal, ao qual você está
acostumado, mas não tem problema. Se
a condição for A = B então NOT ( A = B I,
será equivalente a A< >B. Do mesmo
modo, NOT (A < B) será A > = B e assim
por diante. Na verdade, você poderá es-
crever NOT (A = B) se quiser, e o com-
putador entenderá o que você quer dizer.
Eis aqui o exemplo de um programa
curto (para cronometrar o cozimento de
ovo) que utiliza um laço WHILE:

5 CLS
10 PRINT AT 3.11:"C0NTAD0R"
20 INPUT "Quantos minutos voe
e quer?" t .

30 PP.INT AT 7,5;"Pressione qu
alquer tecla para come
car"
40 PAUSE 0
50 CLS
60 PRINT FLASH 1 ; AT 10,10;"
TEMPO"
70 POKE 23672,0: POKE 23673,0

w
; 3 " " :

IIIIIIIIIIIIMH llllllll
80 LET tiae-PEEK 23672+256* 80 IF TIMER>T*3000 THEN GOTO 11 100 REM COMANDO CASE
PEEK 23673: IF tl*e>t*50«60 0 110 IF CS-"C" THEN GOTO 170
THEIJ GOTO 110 90 PRINT #298. INT (TIMER/50) *SE
;
120 IF CS-"M" THEN GOTO 190
90 PRINT AT 14,10;INT (time GUNDOS" 130 IF C3-"A" THEN GOTO 210
50)
;
" segundos" 100 GOTO 80 140 IF CS-"L" THEN GOTO 230
100 GOTO 80 105 REM FIM DO LACO "WHILE" 150 PRINT comando n*o reconhec
10S REM fim do loop WH1LE 110 PRINT «364. "TERMINADO! Ido"
110 PRINT FLASH 1 ;AT 14.10; 120 SOUND 180. 160 GOTO 240
TERMINADO! " 170 PRINT "CHIAR REGISTRO" :GOSU
120 SOUND .5,20 B 1000
180 GOTO 240
190 PRINT "MODIFICAR REGISTRO*
GOSUB 2000
200 GOTO 240
S CLS 210 PRINT "APAGAR REGISTRO" :GOS
10 LOCATE 10.3:PRINT"CONTADOR D UB 3000
E TEMPO" 220 GOTO 240
20 LOCATE 0,6:INPUT"QUANTOS MIN 230 PRINT "LISTAR REGISTROS" GO :

UTOS VOCt QUER" ;T SUB 4000


240 REM FIM DO CASE
7. Escolhas múltiph
Pode-se lambém fazer múltiplas es-
colhas por meio das declarações
ON...COTO e ON... GOSUB. Entretan-
to, quando utilizar ON...GOTO, veri-
fique se cada uma das opções direciona
você ao final da seção. Na sub-rotina
abaixo, por exemplo, foi necessário usar
um GOTO 1210 após cada opção, para
direcionar o programa para o fim da ro-
tina. Com uma declaração CASE tal
procedimento seria desnecessário.

1000 REM SUBROTINA PARA POLIGON

30 PRINT: PRINT" ESCOLHAS MÚLTIPLAS


PRESSIONE 5U
ALOU ER TECLA Normalmente, as estruturas IF...
PARA COMEÇAR" THEN e WHILE.. .DO são suficientes
40 IF INKEYS- para a maioria dos programas. No en-
"
"THEN 40 tanto, existem algumas estruturas adi-
50 CLS „ cionais que tornam a programação
60 LOCATE 10.15-.PRINT-CONTANDO. fácil. Por exemplo, muitos programas
apresentam mais de dois cursos de ação
70 TIME-0 "
possíveis para um pontodeterminado,
75 REM COMEÇA O LOOP WHILE
Isso poderia ser resolvido com o empre
80 IF TIME>T*3600 THEN GOTO 110
90 LOCATE 12,17:PRINTINT(TIME/6 go de IF...THEIN embutidos; é
0) ;-oeg.- conveniente, porém, utilizar a es*
100 GOTO 80 trutura CASE (caso) — como é
105 REM FIM DO LOOP WHILE conhecida. Ela classifica cada
110 LOCATE 10.19:PRINT"ESTA PRO opção em ordem e direciona
NTO! " o computador a uma série de
120 BEEP cursos de ação possíveis,
grande maioria dos inter-
precadores BASIC exis-
5 CLS tentes para micros não
10 PRINT #43." CONTADOR * incluí a declaração CA- 8. Laço REPEAT...UNT1L
15 LET ES-CHR3(27) SE, mas ela pode ser
20 PRINT #1 29 INPUT" QUANTOS M
, , : simulada por outros
INUTOS VOCE QUER ?";T comandospadrão. 1020 ON N-2 GOTO 1060,1100,1140
30 PRINT «196, "PRESSIONE QUALQU O fluxograma .1160,1180.1200
ER TECLA PARA COMEÇAR" para uma estru-
1030 PRINT "EU NAO SEI O NOME D
40 A$-INKEYS:IF AS-"" THEN GOTO E UM"
40
tura CASE é
1040 PRINT"POLIGON0 COM ";Ni" L
50 CLS
mostrado na fi- ADOS.
-60 PRINT #238. "TEMPO" gura 7 e, em BA- 1050 GOTO 1210
70 TIMER - 0 SIC, um progra- 1060 PRINT "E UM TRIANGULO."
75 REM COMEÇO DO LACO "WHILE" ma típico seria: 1070 PRINT "UM TRIANGULO COM OS
IIIIIIIIIIIHI " P*OG*AMACiOUS,C ,3 IHIIIIIIIHII
Um fluxograma para o laço FOR...
NEXT é semelhante ao que se vê na fi-
110 gura 9. Comparando-o com o laço
1090 GOTO 1210 130 . .
WH1LE da figura 6, observa-se que tem
1100 PRINT "E UM QUADRILÁTERO. Utilizando a sub-rotina do último a mesma estrutura geral. EmBASIC é
1110 PRINT "UM QUADRILÁTERO COM
exemplo, você poderá escrever um pro- descrito assim:
OS LADOS"
1120 PRINT "E ÂNGULOS IGUAIS CH grama utilizando um laço do tipo RE-
PEAT, como o seguinte: 100 FOR i-mirt TO max STEP vai
AMA- SE QUADRADO. 110 declaração
1130 GOTO 1210 10 PRINT "VOU DIZER OS NOMES" 120 NEXT i
1140 PRINT "E UM PENTÁGONO." 20 PRINT "DE ALGUNS POLÍGONOS
.

1150 GOTO 1210 30 BEM COMEÇO DO LACO Não se deve saltar para fora de um
1160 PRINT "E UM HEXÁGONO." 40 GOSUB 1000 laço FOR, utilizando uma declaração
1170 GOTO 1210 GOTO, já que o interpretador BASIC
50 INPUT "VOCE QUER OUTRO NOME
1180 PRINT "E UM HEPTAGONO." ?" ;AS não tem como identificar o que foi fei-
1190 GOTO 1210
60 IF LEFTS(AS.1I-"S" THEN GOTO to. Será fácil saltar de volta dentro de
1200 PRINT "E UM OCTOGONO."
1210 PRINT
30 um laço, no programa, mas a compreen-
70 PRINT "TCHAU !
" : END são de tal estrutura é muito difícil. As-
1220 RETURN
A linha 1000 é a sub-rotina de polí- sim, evite este procedimento.
Como se trata de uma sub-rotina, vo- gono dada na seção anterior.
cê ainda não poderá rodá-la. O progra- COMO COLOCAR TUDO JUNTO
ma para chamar a rotina será dado na
próxima seção.
As estruturas vistas neste artigo são
Talvez você não tenha percebido, as mais conhecidas e importantes, e po-
mas o familiar laço FOR.-.NEXTé ape- dem ser utilizadas em qualquer tipo de
nas um caso especial do laço WH1LE... programa. Mas, para completar o pro-
A declaração REPEAT... UNTIL DO. Ele pode ser utilizado quando se grama, você deverá ainda especificar as
também é uma estrutura muito útil pa- variáveis que irá utilizar e verificar se as
conhece antecipadamente o número de
ra fazer o programa repetir um grupo vezes que o laço deverá ser repetido, variáveis dos diferentes módulos não en-
de comandos (se seu computador não pois esta informação deve ser especifi- trarão em choque umas com as outras.
possui esses comandos, poderá simulá- cada logo no início. A variável que man- Além disso, será preciso especificar to-
los por meio de outros). Nesse caso, ao tém a contagem do número de vezes ao das as entradas e saídas necessárias, tes-
contrário do WHILE...DO, o laço sem- redor do laço é conhecida como variá- tar cada um dos módulos e encadeá-los
pre é executado pelo menos uma vez. vel de controle. todos juntos. No próximo artigo você
Veja o símbolo correspondente no flu verá como executar todas estas tarefas,
xograma da figura 8 e compare-o à fi- mantendo seu programa legível e estru-
gura 6. Em BASIC, será escrito assim: turado.Como exercício, examine alguns
programas já publicados em INPUT e
veja se consegue identificar as estruturas
utilizadas. Em
seguida, tente melhorar o
programa, tornando-o mais estruturado.

9. Laço FOR M\ I
IIIIIIIIIIIHHM PROGRAMAÇÁODt JOGOS ">f lllllllll

Acompanhe a criação de uma aventura


e, depois, crie seu próprio jogo.

Aqui, os primeiros passos: o

desenvolvimento do roteiro e a
confecção do mapa dos locais.

Ames de programar um jogo, é im-


portante elaborar minuciosamente o ro-
teiro, para evitar dificuldades posterio-
res, como erros e pomos obscuros a se-
rem esclarecidos.
Para que você se familiarize com es-
taetapa do trabalho, acompanhe conos-
co o desenvolvimento de um programa
de aventuras típico. A história que to-
mamos como exemplo se passa em um
país distante, onde o jogador deve en-
contrar o olho perdido de um legendá-
rio totem inca. Se você seguir passo a
passo as etapas percorridas para a mon-
tagem desta aventura, sentirá maior fa-
cilidade ao projetar seu próprio jogo.
fiscará para amortizar sua enorme divi
da com a Secretaria. Caso o jogador
tenha encontrado nenhum objeto (não
podendo, portanto, pagar), o fiscal o
Em primeiro lugar o programador prenderá numa masmorra.
precisa criar um '"mundo" que combi- Este é o esquema básico da aventura.
ne com a estrutura básica do roteiro. Es- Resta, agora, trabalhar alguns detalhes
te mundo compõe-se de uma série de ob- — por exemplo, os objeios que serão en-
jetos, cada qual destinado a desempe- contrados na busca. No nosso jogo, de-
nhar um papel específico. Além disso, cidimos contrariar a regra geral de que
deve criar alguns mistérios e problemas todos os objetos devem ser úteis ao de-
para o jogador resolver. senvolvimento da aventura. Desta vez,
Não é necessário fazer tudo isso de haverá um objeto sem nenhuma utilida-
uma vez: á medida que se pensa na his- de na busca empreendida pelo jogador:
tória, seus contornos vão se tornando irata-se de algo pesado (um tijolo, por
mais nítidos, o que facilita a definição exemplo), que irá causar a morte de
dos detalhes. Comece, portanto, rascu- quem tentar atravessar o rio a nado, Um dos artifícios favoritos em jogos
nhando o roteiro básico. carrcgando-o. de aventura é o quarto escuro, no qual
Nosso jogador encontra-se em pés- O objeto mais importante de todos todas as coisas horríveis podem aconte-
sima situação financeira e, por isso, sai será o olho. Para aumentar o interesse cer. Esta aventura não será uma exce-
em busca do fabuloso olho inca (de al- do jogo, convém imaginar uma manei- ção. Sem a lâmpada — que deverá des-
tíssimo valor), escondido em algum lu- ra de disfarçá-lo ou escondê-lo. Pode- cobrir em algum misterioso lugar — o
gar do mundo da aventura. Infelizmen- ríamos colocá-lo dentro de um baú ou pobre aventureiro não encontrará as saí-
te, a Secretaria da Receita enviou um fis- de uma catacumba, mas existem solu- das, ficando em péssima situação.
cal para acompanhar o caso. O papel ções mais sutis para enganar o jogador. Talvez isso seja um tanto injusto, já
desse personagem é bastante semelhan- .Assim, em vez de esconder o olho num que o jogador não receberá nenhum avi-
te ao do pirata de outras aventuras — lugar que obviamente contém algo de so de perigo iminente, nem terá condi-
ou seja, cabe-lhe arruinar o infeliz jo- valor, vamos deixá-lo dentro de um sa- ções de sair do quarto escuro, a não ser
gador. Sua aparição pode acarretar dois quinho de bolas de gude. O aventureiro que tenha encontrado a lâmpada. Para
I acontecimentos. Se o jogador estiver le- não irá a lugar nenhum se tentar jogar dar uma melhor oportunidade ao aven-
I vando consigo um objeto, o fiscal o con- com as bolinhas de gude! tureiro, permitindo- lhe enfrentar pelo
, 1

IIIIIIIIIMI 10 PROGRAMAÇÃO DE JOGOS 10 IHIIIIIIIIIII


~
CRIAÇÃO DO ROTEIRO PERSONAGENS E OBJETOS
DEFINIÇÃO DOS O PRIMEIRO MAPA

menos um dos perigos — o fiscal —


uma arma de fogo estará escondida em
algum lugar.
Finalmente, para aumentar a diver-
são, haverá uma sala do trono e uma
corrente. A sala do trono não é exata-
mente o que parece. Na verdade, o tro-
no em questão se transforma num sim-
ples sanitário, se o jogador não estiver
de posse do olho. E, caso puxe a cor-
rente, provocará uma descarga que o fa-
rá desaparecer, tirando-o mais depres-
sa da aventura.
Falta ainda estabelecer um dos prin-
cipais elementos do jogo: as condições |
IIIIIIIIIIIHI " nOGRAMAÇAODtJOGOS 10

necessárias à vitória. Não existe saída COMO FAZER 0 MAPA cisando de memória — descrições de lo-
evidente do mundo da aventura c boa cais, palavras que o programa deve re-
parte do quebra-cabeças consiste em conhecer, o número de objetos e o pa-
descobrir como escapar com a peça do O primeiro mapa será composto por pel de cada um deles, o número de enig-
totem. Assim, para ganhar o jogo, o uma sériede quadrados ligados entre si mas e sua complexidade, etc.
aventureiro obviamente precisará ter en- por setas, como mostra a ilustração des- Depois de ler programado algumas
contrado o olho —
não apenas o saqui- ta página. Cada quadrado representará pequenas aventuras c verificado o espa-
nho de bolas de gude. Para dificultar um um ambiente ou local da aventura lo-— ço que ocupam, ficará mais fácil calcu-
pouco mais, ele deverá também estar na cal talvez seja o termo mais adequado, lar o que è possível encaixar na memó-
sala do trono. Puxar a corrente desta vez por sua abrangência. Pode designar des- ria do seu computador.
não fará com que ele entre pelo cano! de a cabeça de um alfinete escondido na Quem tiver um micro de I6K logo
Transformar a saída em risco, sob barra do vestido da rainha, até uma descobrirá que é impossível escrever
condições diferentes, apresenta a vanta- imensa planície. Todos os locais devem uma aventura cm grande escala dispon-
gem de desencorajar o jogador a tentá- ser incluídos no mapa: os da lista preli- do de tão pouca memória RAM. No en-
la constantemente; desta maneira pro- minar e outros que se façam necessários tanto, a aventura que desenvolveremos
longa-se o jogo todo. para completar o jogo. aqui inclui um número reduzido de lo-
Ao esboçar o mapa, não se esqueça cais— doze. ao todo — e, portanto, não
de assinalar a direção em que se pode dará esse tipo de dor de cabeça.
ir a partir de cada local. Se quiser, in- Um mapa para a Busca do Olho Inca
clua saídas que só funcionem em uma pode ser semelhante ao de nossa ilustra-
Antes de começar o mapeamento, direção — acompanhadas de mensa- ção. As ligações entre os locais foram
convém fazer uma recapitulação, listan- gens, como por exemplo: todas previstas, e o ponto de partida es-
do os elementos até agora envolvidos na tabelecido. Isso é muito importante,
aventura. Assim, não se corre o risco de
A PORTA BATE, pois afeta a maneira de se abordar a
perder o fio da meada.
FECHANDO-SE ATRÁS DE VOCÊ aventura, a ordem em que os objetos são
As faixas listradas que saem do quar- descobertos e também a tentativa de
PERSONAGENS to escuro indicam que o jogador só po-
• Aventureiro derá ir na direção indicada quando de-
• Fiscal da Receita — deve s

aleatoriamente

OBJETOS
• Globo ocular —
escondido no
saquinho de bolas de gude.
• Tijolo —
peso que mata o
aventureiro caso este tente
atravessar o rio a nado
• Lâmpada —
necessária para se achar
a saída do quarto escuro
• Arma — para matar o fiscal da
Receita
• Corrente —
tira o aventureiro do
jogo se este chegar ã sala do trono
e puxá-la, sem estar de posse do olho

LOCA IS
• Río
Tijolo Atalho
• Quarto escuro
• Sala do trono terminadas condições forem satisfeitas.
No nosso caso, a condição é estar de
Até aqui, fixamos apenas três dos lo- posse da lâmpada acesa, para enxergar O primeiro mapa da avenlura mostra todos
os locais planejados em suas posições
cais da aventura, em função do que ne- as saídas.
relativas. As selas vermelhas indicam as
lesdeve acontecer. Podemos muito bem, Nào o número de locais
é fácil prever
saídas que eslão lonslanlemenle abertas;
neste ponto, tomar novas decisões. Mas, que determinada quantidade de memó- as setas listrada* indicam saídas que só
seja como for. o próximo passo consis- ria RAM pode conter. A dificuldade es- podem ser utilizadas sub condições
em encaixar todos os elementos num
tirá tá no próprio programa de aventura, —
i-spi-ciais neste caso, quando o
mesmo mapa do mundo da aventura. que inclui muitos elementos, todos pre- avenlureiro estiver de posse da lâmpada.
PROGRAMAÇÃO DiJOGOS
IIIIIIIIHH 10 10
lllllllllll

se resolver o quebra-cabeças. condições do mapa proposto. A manei- \ para descer as escadas, bastará usar
ra de fazè-lo será detalhadamente expli- i resposta normal OESTE.
Os objeios lambem eslão assinalados
em seus locais. Os que aparecerão pos- cada mais adiante.
teriormente —
como. por exemplo, o Se a aventura incluir saídas a noroes-
olho inca —
devem ser listados ã mar- te, nordeste, sudeste e sudoeste, deve-

gem do mapa. se utilizar o conjunto de setores octogo-


nais. O emprego desse tipo de conjunto Nossa aventura utilizará um conjun-
é, porém, muito complicado. to de setores composto de seis por qua-
DO MAPA AOS SETORES Existe ainda a possibilidade de se in- tro quadrados — verifique o mapa pro-
cluir, na aventura, deslocamentos para posto, para cima e para baixo, para a
Umavez concluído o mapa, os dados cima ou para baixo. Nesse caso, a me- esquerda e para a direita. Antes de ini-

podem para os setores.


ser transferidos lhor solução é a utilização de conjuntos ciar a transferência de todos os detalhes
Emgeral, no planejamento de jogos distintos de setores para cada "nível" para os setores, certifique-se de que ca-
de aventura, os setores são organizados da aventura. da quadrado foi devidamente numera-
em dois tipos de conjunto: um que tem A Busca do Olho tem como base um do. Deve-sc começar com o número 1,
por base quadrados e outro que tem por conjunto do tipo quadrado — ou seja, no alto à esquerda, e prosseguir até a
base octógonos (veja as ilustrações na permite saídas somente para norte, sul, parte inferior à direita.
página 230). A escolha de qual utilizar leste e oeste. A não ser que haja uma Uma vez numerados os quadrados e
dependerá do número de saídas de ca- real necessidade de outras direções, es- transferidos os detalhes, o conjunto dos
da local. se tipo de aventura é bastante satisfató- setores terá uma aparência semelhante
O tipo mais simples de aventura in- rio, permitindo, inclusive, que se intro- à da ilustração da página 231.
clui saídas em quatro direções: norte, duza uma certa confusão no direciona-
sul, leste e oeste (como na Busca do mento das saídas. Por exemplo, pode-
uma COMO COMEÇAR 0 PROGRAMA
Olho). Nesse caso, deve-se transferir os se acrescentar a seguinte frase a
dados para um conjunto de setores qua- descrição:
drados, de modo que se enquadrem nas Depois de estruturar o roteiro bási-
EXISTEUMA ESCADA co da história e de completar os setores,
DESCENDO PARA O OESTE pode-se dar inicio ao programa.
A primeira etapa será a digitação das
descrições dos locais, tendo como base
o setor proposto. Deve-se decidir a ex-
tensão das descrições e procurar trans-
mitir o melhor possível a atmosfera da
aventura, sem desperdiçar memória.
Junto com as descrições dos locais,
o computador deverá receber as infor-
mações sobre as direções em que se en-
contram as saídas.
Illllllllimi <» PROGRAMAÇÃO Dl JOGOS 10 1H|||||||||||
512C N-l E-l S-l :W-0 RETURN
: : :

5130 REM* "LOCAL 11**


5140 PRINT" VOCE ESTA NUM QUART
O ESCURO"
5150 IF 0B(6)<>-1 OR LAOl THEN
N-0 E-0 :S = 0 :W-0 PRINT" ESTA MU
: :

ITO ESCURO PARA VER AS SAÍDAS


* RETURN
:

5160 N=0:E-0:S=1 :W-1 RETURN :

5170 REM* "LOCAL 14""


5180 PRINT" .VOCE ESTA NUM ATALH
O ENLAMEADO"
5190 N-l E-l S-0 W-0 RETURN
: : : :

5200 REM "'LOCAL 15*"


5210 PRINT" VOCE ESTA NA ENTRAD
A DA CIDADE OCULTA"
5220 N-0:E-1:S-0:W-1:RETURN
5230 REM"*LOCAL 16**
5240 PRINT" VOCE ESTA NO HALL D
Parle de um conjunto de selores quadrados. Parle de um conjunto de selores octogonais E ENTRADA"
Neste tipo de conjunlo. pode-se planejar — utilizado quando se quer incluir saídas 5250 N-1:E-1:S-1:W-1:RETURN
aventuras utilizando quatro saídas: para para noroeste, nordeste, sudoeste e 5260 REM**LOCAL 17-"
norte, sul. leste e oeste. sudeste. 5270 PRINT" VOCE ESTA NO PÁTIO"
5280 N-1:E-1 S"0 W-l RETUHN
: : :

Veja, abaixo, as primeiras seções do A DA CIDADE OCULTA" 5290 REM**LOCAL 18**


5220 LET N-0: LET E-l: LET S-0: 5300 PRINT" VOCE ESTA NO JARDIM
programa. O número alto das linhas tem LET W-l: RETURN
a finalidade de assegurar espaço para as 5230 REM ** LOCAL 16 ** 5310 N-0:E-0:S-1 :W-1 RETURN :

seções anieriores, à medida que o jo- 5240 PRINT "VOCE ESTA NO HALL D 5320 REM**LOCAL 22*
go for se desenvolvendo. Digite a seção E ENTRADA" 5330 PRINT" VOCE ESTA NO GUARDA
e preserve-a em fita: 5250 LET N-l: LET E-l: LET S-l: -LOUCAS"
LET W-l: RETURN 5340 N-l: E-0: S-0: W-0: RETURN
5260 REM ** LOCAL 17 ** 5350 REM* "LOCAL 24**
5270 PRINT "VOCE ESTA NO PÁTIO" 5360 PRINT" VOCE ESTA NA SALA D
5260 LET N-l: LET E-l: LET S-0: 0 TRONO"
5000 BEM ** DESCRIÇÃO DO LOCAL LET W-l RETURN
: 5370 N-1:E-0:S-0:W-0:RETURN
5290 REM ** LOCAL 18
5010 REM ** LOCAL 4 * 5300 PRINT "VOCE ESTA NO JARDIM Não se preocupe com o uso repetido
5020 PRINT "VOCE ESTA DO LADO D de comentários REM incluídos na me-
E FORA DE UM GRANDE PRÉDIO" 5310 LET N-0: LET E-0: LET S-l: mória. Nesta etapa inicial do desenvol-
5030 LET N-0: LET E-0 LET S-l
: LET W-l: RETURN vimento do programa, o importante é
LET W-0: RETURN 5320 REM ** LOCAL 22 ** saber o que cada trecho do programa
5040 REM ** LOCAL 7 *» 5330 PRINT "VOCE ESTA NO GUARDA faz, ou qual o número do local a que de-
5050 PRINT "VOCE ESTA A BEIRA D -LOUCAS" terminada descrição se refere. Os co-
E UM GRANDE RIO" 5340 LET N-l: LET E-0: LET S-0: mentários sempre podem ser eliminados
5060 LET N-0: LET E-l: LET S-0 LET W-0: RETURN
posteriormente. Após cada linha de des-
LET U-0: RETURN 5350 REM ** LOCAL 24
5070 REM *
LOCAL 8 * 5360 PRINT "VOCE ESTA NA SALA D crição do local, existe outra linha con-
5080 PRINT "VOCE ESTA NUMA FLOR O TRONO" tendo dados sobre suas possíveis saídas.
ESTA PETRIFI-CADA- 5370 LET N-l: LET E-0: LET S-0: As variáveis N, S. L e O referem-se a
5090 LET N-0: LET E-0: LET S-l: LET W-0: RETURN norte, sul, leste e oeste. Elas podem ter
LET W-l RETURN —
um ou dois valores 0 significa que não
QQ^U
:

5100 REM ** LOCAL 10 ** há saída naquela direção, ao passo que


5110 PRINT "VOCE ESTA NUMA SALA 1 significa que há uma saída.
EMPOEIRADA" Finalmente, existe um RETURN
5120 LET N-l: LET E-l: LET S-l: 5000 REM**DESCRICAO DOS LOCAIS* após as seções do programa, pois cada
LET U-0: RETURN
5130 REM *
LOCAL 11 ** 5010 REM**LOCAL 4*" descrição de local será chamada por
uma instrução GOSUB.
5140 PRINT "VOCE ESTA NUMA SALA 5020 PRINT" VOCE ESTA DO LADO D
ESCURA" E FORA DE UMA GRANDE CONSTRU Um IF...THEN extra na seção do
5150 IF LAOl THEN LET N-0: LE CAO" quarto escuro verifica se o aventureiro
T E-0: LET S-0: LET W-0: PRINT 5030 N-0 E-0 S=l W-0 :RETURN
: : :
possui a lâmpada; porém, a descrição
" ESTA MUITO ESCURO PARA VER AS 5040 REM**LOCAL 7"* das variáveis será tratada mais adiante,
SAÍDAS": LET DA-1: RETURN 5050 PRINT" VOCE ESTA A BEIRA D quando analisarmos os objetos.
5160 LET N-0: LET E-0: LET S-l: E UM GRANDE RIO" No próximo artigo veremos como
LET W-l: RETURN 5060 N-0 E-l S-0 :W-0 RETURN
movimentar o jogador pelo mundo que
: : :

S170 REM ** LOCAL 14 ** 5070 REM**LOCAL 8**


5080 PRINT" VOCE ESTA NUMA FLOR criamos.
5180 PRINT "VOCE ESTA EM UM ATA
LHO ENLAMEADO" ESTA PETRIFI CADA"
5190 LET N-l: LET E-l: LET S-0: 5090 N-0: E-0 S = l W = l RETURN
: : :
Ultima etapa anles da programação. O
LET W-0 RETURN
: 5100 REM*"LOCAL 10** conjunlo de selores é uma cópia dírela
I 5200 REM LOCAL 15 ** 5110 PRINT" VOt?E ESTA NUMA SALA do mapa, numa forma que facilita o
| 5210 PRINT "VOCE ESTA NA ENTRAD MUITO SUJA" Irabalho.
0

IIIIIIIIIIIHH lllllllll III

Os computadores domésticos oferecem


vários recursos ao artista amador.

Aprenda novas formas de utilizar

os comandos gráficos em BASIC


SOFISTICADO! e crie livremente suas ilustrações.

Tendo já dominado os princípios bá- 90 BORDER 4: PAPER 4: CLS


ZOO LET u-10 LET 9-50
sicos do desenho na tela, você pode co-
:

210 FOB C-162 TO 174


meçar a empregar alguns recursos gráfi- 220 PLOT INK 2;v.c
cos especiais, disponíveis no seu compu- 230 DRAW INK 2;a,0
tador. Comandos como MOVE, PLOT, 240 LET w-w+2; LET a-a-4
DRAW, PAINT e C1RCLE permitem 250 NEXT c
que você solte as rédeas de sua imagi- 260 FOR b = 148 TO 162
nação, criando qualquer tipo de imagem 270 PLOT INK 2;10.b
— de um diagrama explicativo para ilus- 280 DRAW INK 2 50 ; ,

trar uma mensagem comercial ao cená- 290 NEXT b


295 DRAW INK 2 10,-3: DRAW 0.
rio de um excitante jogo de aventuras.
;

-11
No artigo da página 13 mostramos
1
; AT
como utilizar comandos simples para
criar ilustrações com linhas na tela e, em
alguns casos, como acrescentar cor. Mas As linhas numeradas de 200 a 250 de-
você pode sofisticar seu repertório, senham o telhado, utilizando técnicas
aprendendo outras maneiras de traçar semelhantes às ensinadas no artigo an-
pontos, desenhar linhas, triângulos, terior (página 113). Na tela, em 10.162,
quadrados e círculos. Os comandos aqui aparece primeiro uma linha de 50 pixels
ensinados —
em combinação com cores de largura. Depois uma largura de 4
ou não —
constituem um eficiente re- pixels, para cada pixel desenhado.
curso para formar imagens estáticas ou Um laço parecido aos das linhas 260 ...
até mesmo móveis. a 290 desenha as paredes, com duas li-
Embora os vários modelos de com- nhas extras {na linha 295) para traçar a
putador utilizem esses comandos de ma- varanda. Em seguida, a linha 300 preen-
neira diferente, todos são capazes de che as janelas pelo método mais simples
produzir alguns efeitos interessantes. As possível —
imprimindo um quadrado
exceções são o Apple, o TK-2000. o negro, com caracteres gráficos da ROM,
TRS-80 e o ZX-81 , cujo BASIC não in- em três lugares da parede.
clui esses comandos. Entretanto, você
pode obtê-los acrescentando um cartu-
COMO DESENHAR AHC0S
cho ROM adequado ou adquirindo pro-
gramas em disco ou fita.
No Spectrum, como já foi explicado
anteriormente (página 1 1 5), o comando
CIRCLE é o instrumento mais simples
para se desenhar um círculo completo.
Mas, se quisei somente uma parte do
círculo, será mais fácil acrescentar um
Os arcos e círculos são um dos mais número a uma declaração convencional lnforma-se assim, ao computador, qual
úteis "instrumentos" do Spectrum pa- DRAW. Pode-se obter uma variedade fração do círculo será desenhada. Um
ra fazer desenhos na tela. imensa de efeitos por meio dessa decla- circulo completo é representado por
Este programa para um campo de ração; assim, vale a pena fazer alguns duas vezes Pi (3.1416); portanto, com
golfe mostra como empregá-los para de- experimentos antes de prosseguir. o número I, obtém-se o desenho de
senhar árvores, cercas, água, terrenos aproximadamente um sexto do círculo
10 PLOT 130,30 (ou, mais precisamente, dividido por
acidentados e buracos. 1

20 DRAW 0,10,1 duas vezes Pi). Se você tentar modificar


Você pode testar seu progresso na 30 GOTO 20
medida em que for rodando cada gru- a linha 20 para:
po de linhas. Não dê o comando NEW (Não se preocupe com a mensagem de
toda hora; se você deixar as linhas in- erro.) 20 DRAW 0,10,2
tactas, obterá a cena mostrada na ilus- Como você deve se lembrar, os pri-
meiros doís números da linha 20 dizem ... obterá uma série de curvas mais pro-
tração da página 237.
Antes de começar o trabalho com os ao computador para desenhar uma linha nunciadas. Do mesmo modo, 0,10,3 for-
círculos, porém, convém deixar pronta do ponto traçado até um ponto 10 pi- nece um modelo denteado, e 0,10,4 pro-
a sede do clube. Para isso, entre estas xels acima dele. O último número, por duz parte de uma cerca (ou a metade de
linhas no computador: sua vez, determina a curvatura da linha. um tronco de palmeira, dependendo de
Illllllll
RECURSOS GRÁFICOS O COMANDO DRAW
ESPECIAIS UM NAVIO
ARCOS E CÍRCULOS EM POUCAS LINHAS
DESENHE UM CAMPO DE COMO DESENHAR LETRAS
GOLFE NO SPECTRUM MENSAGENS LONGAS

sua imaginação), enquanto 0,10,6 produz


uma espiral. Se, no entanto, você tentar:
20 DRAW 0,10. 2*PI

... poderá ter uma surpresa! O Spectrum

desenhará um circulo em que dois pon-


tos estarão em linha reta.Mas, já que tal
círculo pode se tornar muito maior do
que sua sala —
na verdade, bem maior
do que o sistema solar —
o computa-
,

dor desenhará apenas a pane do circu-


lo que é capaz.
Para o cenário, experimente isto:
10 PLOT 0,100
20 DRAW RND"5+5.0,2
30 GOTO 20
A forma obtida assemelha-se à das
ondas em um mar agitado. Para dese-
nhar águas calmas, tente RNDMO + 10
ou mesmo RNDM5 + 10.
Com relação aos círculos e arcos, vale
ainda lembrar que um número negati-
vo no final da linha DRAW
produzirá
a imagem -espelho do arco.
Agora, limpe as linhas de 10 a 30 e
continue montando o cenário para a pis-
ta de golfe.

O programa da pista de golfe inclui


dois exemplos de arcos utilizados para
efeito gráfico — o primeiro compõe a
pequena cerca em frente à sede do clu-
be; o segundo, o lago.
Digite estas linhas:

310 FOR f-0 TO 84 STEP 3


320 PLOT f 142 ,

330 DRAW 3,0,-3


340 NEXT f
350 DRAW 35,-42: DRAW -12.-6
O ponto de partida na tela é 0,142.
A linha 330 desenha uma série de arcos
estreitos — ou seja, semicírculos com
apenas 3 pixels de largura —
para for-
mar a cerca. O número obtido é regula-
do pelo laço FOR. ..NEXT.
Agora, entre e rode estas linhas:
100 LET -130: LET y-125: LET
-50
110 PLOT 1NK 5;x.O
120 DRAW INK 5;y.z.-1.25
130 LET x-x+1: LET yyl:
HIIIIIIHHH 1111111111
HO IF x>254 THEN GOTO 170 950 CIRCLE a-10.b+f,f: CIRCLE Alternativamente, você poderá fazer
150 IF Z<1 THEN LET Z'0 a.b+f.f: CIRCLE a+10,b+f,f os arbustos de um modo mais simples,
160 GOTO 110 960 CIRCLE a-5,b*f*2.f: porém mais grosseiro, utilizando blocos
CIRCLE a+S.b+f*2,f gráficos.
Aqui a ilustração é mais complicada. 970 CIRCLE a,b+f*3,f
Em primeiro lugar, o computador tra- 980 NEXT v
ça um ponto de 130 pixels a partir da 3000 DATA 20,70.52,85,84,100
esquerda e 0 pixel a partir do canto in- A solução, aqui, foi desenhar primei-
ferior da tela. Em seguida, desenha uma ro os troncos, de modo descendente, a
linha no ponto 125 pixels à direita e a partir dos pontos traçados originalmen-
eleva a 50 pixels do canto inferior da te- te. Desse modo, evita-se que eles apare-
Os comandos CIRCLE c LINE são
la, "arqueando" a linha em — 1.25 ra- çam através das "folhagens". Os tron- muito úteis para desenhos simples de
diano, à medida que ela vai se de- cos são traçados na tela a 20,70 e assim formato regular, requerendo um mínimo
senvolvendo. por diante, pelos dados fornecidos pela esforço do programador. Empregá-los
Apartir desse estágio as variáveis en- linha 3000. A linha 940 desenha aleato- para desenhos mais complicados, porém,
tram em cena. A variável x inicia cada riamente o tamanho das folhagens, en- tornará seus programas longos e de difí-
linha I pixel mais á direita; a variável quanto que b + f, na linha 950, assegu- cil manuseio. Imagine o tamanho de um
y torna a linha l pixel mais curta do que ra que as séries de círculos ao fundo ini- programa que desenhasse algo como o
a anterior (caso contrário ela ultrapas- ciem com uma distância razoável acima navio da página 232, usando um coman-
saria os limites da tela), enquanto a va- dos troncos. do LINE para cada linha da ilustração...
riável i faz com que a linha termine I

Para contornar esse problema, deve-


pixel abaixo da anterior.
Eventualmente, é claro, a variável i.
mos utilizar o comando DRAW, que
poderá se tornar um número negativo,
permite direcionar a trajetória de uma
O lee propulsor, ou seja, o apoio on- linha enquanto ela está sendo traçada.
fazendo com que o computador tente
(mas falhe) imprimir o canto inferior da de se coloca a bola para a tacada inicial,
Podemos dizer ao computador que leve

tela. Por isso a linha 50 é necessária:


1
é desenhado por estas linhas:
a linha até uma
certa distância ã direi-

ela faz com que todas as pequenas linhas


ta, até uma
outra distância para cima e
1000 LET t-30 assim por diante. Essas instruções são
no final do programa terminem na linha 1010 FOR y-0 TO 10 fornecidas dentro de um cordão, o que
inferior da tela. 1020 PLOT t.y
torna o programa muito mais compacto.
1030 DRAW -30,30
1040 LET t-t+2 Como exemplo, digite e rode este
AS ARVORES E OS ARBUSTOS 1050 NEXT V programa; veja como é possível dese-
nhar um navio com algumas poucas
E as linhas abaixo desenharão as ban-
O programa da pista de golfe tam-
deirinhas no gramado:
linhas.
bém utiliza círculos completos (como
um substituto para PAINT ou uma de- 170 PLOT 220.140
claração similar, disponível em alguns 180 DRAW 0.15: DRAW 8,-3
computadores) para produzir árvores e DRAW -8,-2 10 PMODE 4.1
arbustos. Estas poucas linhas desenha- 190 PLOT 22,120 20 PCLS 5
195 DRAW 0.18: DRAW 9,-3: 30 SCBEEN 1,1
rão alguns arbustos ao acaso no "gra-
DRAW -9.-2 40 DRAW -BM23.96C0"
mado":
Finalmente, você precisará de alguns 50 DRAW "R28E2U3L6UR6E2R5F2D3R3
400 FOR r-172 TO 168 STEP -1 buracos. Na ausência de uma declara-
U2R7D2R4U9E2R4F2D5R3U2R4U6E3R5D
410 LET x-RND'45+195
415 PLOT x.r-2: DRAW 0.-2 ção PAINT, a maneira de desenhá-los
420 CIBCLE X,r.RND*2+l que oferece os melhores resultados (em-
440 CIRCLE X+I0,r,RND*2+l bora também seja a mais demorada) é
450 NEXT r começar com uma elipse bem pequena
e ir aumentando-a, pixel por pixel, até
Estas outras linhas produzirão algo atingir um tamanho razoável.
parecido, no lado direito: Como o traçado de elipses será deta- 80 DRAW -R6DL6D3R24G12L195H4U5"
lhadamente explicado em um artigo fu- 90 PAINT (127.100) .0,0
460 FOR r-135 TO 172 STEP 6 100 GOTO 100
470 LET y-252 turo sobre as funções matemáticas do
480 CIRCLE y r RND+2
. ,
computador, entre e rode estas linhas:
490 NEXT r
As árvores, no lado inferior esquer- 30 SCREEN 2
do, são muito grandes e, por isso, não 40 DRAW "BM23.96C1"
se pode desenhá-las aleatoriamente, 1510 PLOT INK 6;168+r*SIN x.14 50 DRAW "R28E2U3L6UR6E2R5F2D3R3
usando DRAW. Assim, utilizamos uma 7+r"C0S X/2. U2R7D2R4U9E2R4F2D5R3U2R4U6E3R5D
técnica diferente: READ...DATA (ve- 1520 PLOT INK 6;235+r*SIN x.10
ja páginas 128 a 133): 6+r*COS x/2. 75
1530 PLOT INK 6;225+r*SIN x,97
900 FOR w-l TO 3 +r«COS x/2.
910 READ a.b 1540 NEXT x
920 PLOT a,b 1550 LET r-r+2
I 930 DRAW 0,-24 1560 IF r>20 THEN GOTO 6000
I 940 LET f-RND*5+5 1570 GOTO 1500 DRAW "R6DL6D3R24G12L195H4U5"
IIIIIHIHH lllllllll
ponto de partida, que no nosso caso é xo à direita (135 graus); C. para baixo
23,96 (noie que as coordenadas não es- à esquerda (225 graus) e H, para cima

O programa funciona assim: tão entre parênteses, como em outros à esquerda (315 graus).
comandos gráficos). A instrução final Se acompanharmos os comandos do
As linhas numeradas de 10 a 30 esta-
do cordão seleciona a cor preta (Ci no cordão da linha 50, leremos: à direita 28
belecem as condições iniciais, selecio-
MSX e CO no TRS-Color). pixels, a 45 graus 2 pixels, para cima
nando uma leia de alia resolução.
diante. Para se
DRAW
das linhas 40 A linha 50 começa a traçar o contor- 3 pixels, e assim por
Os comandos
no. Embora pareça confuso, o cordão exercitar, tente transformar o cordão em
a 80 formam o contorno do navio. Este
da instrução DRAW é na realidade mui- movimentos de lápis, em papel mili-
comando opera somente no cordão de
instruções contidas entre aspas. to simples, consistindo de uma série de meirado.
linha 40 é a mais simples, com um direçòes e distâncias. As letras contro- As linhas 60 a 80 contêm cordões pa-
A recidos que completam o contorno do
curto cordão de instruções que dizem à lam a direção da linha e os números, sua
distância em pixels. Se não houver um navio. Pode-se utilizar apenas um cor-
máquina onde começar o desempenho,
número após uma direção, o movimen- dão longo em vez de todas essas linhas,
e com que cor. A primeira instrução, mas um número grande de instruções
BM,significa"mover em branco", co- to será de apenas um pixel.
Existem 8 direções: U, para cima {up, tende a tornar mais difícil a manipula-
locando a "caneta" que fará o desenho
em inglês); R, direita (right); D, para ção e a correção dos dados.
na posição onde desejamos iniciá-lo. Se
baixo (down); L, esquerda (te/O; E, pa- Finalizando o desenho, a linha 90
não houvesse a letra B, a "caneta" tra-
enquanto se dirigisse ao ra cima á direita (45 graus); F, para bai- pinta de preto a silhueta traçada na tela.
çaria uma reta,
' . .

IIIIIIIIIIIHH llllllll
COMO DESENHAR LETRAS posição inicial é 110,50 e a cor é de nú-
mero 3; a palavra será impressa em ta-
Uma das limitações do TRS-Color manho 8 (escala dupla). O S pode ser se-
em relação aos programas gráficos é sua guido por um número de 1 a 62, no TRS,
ff/i
incapacidade de exibir textos na tela de e de 1 a 255, no MSX. O é um quarto 1

alta resolução (isto não vale para o do tamanho, o 4 é o tamanho normal 20 DIM L ES (26)
MSX). Não se pode, por exemplo, im- (a escala que se obtém se não houver ins- 30 CLS
primir uma contagem de pontos em um trução) e o 8 é o tamanho duplo. 40 FOR K-0 TO 26
jogo que utiliza gráficos (por essa razão, Como demonstra a linha 50, é possí- 45 READ LES (K) NEXT :

o jogo da página 62 é todo exibido em vel unir cordões de instruções DRAW 50 FOR K-0 TC 9
tela de textos). como quaisquer outros cordões. Se vo- 55 READ NUS (K) NEXT :

chamar como QA$ ou 60 DATA BR 2 ND4R3D2NL3ND2BE2 ,ND


.
Para contornar o problema, você de- cê quiser cordões
4R3DGNL2FDNL3BU4BR2 NR3D4R3BU4B
do mesmo modo
.
ve projetar seus próprios caracteres uti- BFS, poderá fazê-lo R2 ND4R2FD2GL2BE4BR NR3D2NR2D2R ,

lizando o comando DRAW. Digite e ro-


,

que na linha 50. Movimente para o pon- 3BU4BR2


de este programa e você verá a interjei- to de partida utilizando BM e, então, es- 70 DATA NR3D2NR2D2BE4BR NR3D4R3 ,

ção ALÔ! ser traçada: tabeleça a cor por e o C tamanho por S. U2LBE2BR D4BR3U2NL3U2BR2 ND4BR2
, ,

,BD4REU3L2R3BR2 D2ND2NF 2E2BR2 ,

MENSAGENS MAIS LONGAS 80 DATA D4R3BU4BR2 .ND4FREND4BR2


,ND4F3DU4BR2 NR3D4R3U4BR2 ND4R3 , ,

D2NL3BE2 NR3D4R3NHU4BR2
,

10 PMODE 3.1 É muiio trabalhoso definir cordões 90 DATA ND4R3D2L2F2BU4BR2 BD4R3 ,

20 PCLS para cada mensagem quando se quer exi- U2L3U2R3BR2 RND4RBR2 D4R2U4BR2
, .

30 SCREEN 1,0 bir na tela um grande número delas. D3FEU3BR2 D4EFU4BR2 .

40 OIS-"D4R3U4L3BRSD4R3BR2U4R3D Para simplificar a tarefa, defina to- 100 DATA DF2DBL2UE2UBR2 DFND2EU ,

2NL3D2BR2U1BU1U2" dos os caracteres que irá utilizar, digitan- BR 2 R3G3DR3BU4BR2


.

50 DRAM "BM110,SO;C358"+OIS do um programa como o que se segue: 110 DATA NR2D4R2U4BR2 BDEND4BR2 ,

60 GOTO 60 ,R2D2L2D2R2BU4BR2 NR2BD2NR2BD2R ,

2U4BR2 D2R2D2U4BR2 NR2D2R2D2L2B


Q .

E4.D4R2U2L2BE2BR2, R2ND4BR2 NR2D


4R2U2NL2U2BR2 NR2D2R2D2U4BR2
120 SCREEN 2
,
,

30 SCREEN 2 130 A$-"TESTANDO0123456789*


40 0IS-"D4R3U4L3BR5D4R3BR2U4R3D 10 PMODE 3,1 140 DRAW -BM60.50C1S8"
2NL3D2BR2U1BU1U2" 20 DIM LESI26) 150 GOSUB 9000
50 DRAW •BMU0.50:C3S8"+OIS 30 PCLS 160 GOTO 160
40 FOR K-0 TO 26
60 GOTO 60 9000 FOR K-l TO LEN (AS)
45 READ L ES (K) NEXT :
9010 BS-MIDSÍAS.K.l)
No TRS, a mensagem é traçada em 50 FOR K-0 TO 9 9020 IF BS>-"0" AND BS<-"9" THE
PMODE3, uma modalidade de quairo 55 READ NUS (K) : NEXT N DRAW NUS (VAL (BS :G0T0 9050 )
cores. No MSX, em SCREEN 2, a tela 60 DATA BR2 ND4R3D2NL3ND2BE2 ND
, .
9030 IF BS-" * THEN N-0 ELSE N-
)

de alta resolução (iembre-se de que o 4R3DGNL2FDNL3BU4BR2 NR3D4R3BU4B ,


ASC(BS)-64
MSX tem outras maneiras de escrever R2 ND4R2FD2GL2BE4BR NR3D2NR2D2R
. ,
9040 DRAW LES (N)
textos nesta tela). 3BU4BR2 9050 NEXT
70 DATA NR3D2NR2D2BE4BR NR3D4R3
A linha 40 mostra mais uma caracte- U2LBE2BR D4BR3U2NL3U2BR2 ND4BR2
,
9060 RETURN
do comando DRAW. Como efe
, ,

rística
BD4REU3L2R3BR2 D2ND2NF2E2BR2 —
opera em um cordão de instruções, vo-
,

BO DATA D4R3BU4BR2 ND4FREND4BR2


,

O conjunto de caracteres letras de


cê poderá definir variáveis e chamá-las ,ND4F3DU4BR2 NR3D4R3U4BR2 ND4R3 .
.

,
A a Z e algarismos de 0 a 9 está con- —
mais tarde com um comando DRAW no D2NL3BE2 .NR3D4R3NHU4BR2 tido nas linhas DATA
de 60 a 110. O
programa. 90 DATA ND4R3D2 L2F2BU4BR2 BD4R3 , conteúdo destas é transferido para duas
As instruções em OlS dizem ao com- U2L3U2R3BR2 RND4RBR2 D4R2U4BR2
, , variáveis alfanuméricas LÉS e NUS —
putador como traçar as letras para for- D3FEU3BR2 D4EFU4BR2 , — pelas linhas 40 a 55.
mar ALÔ!. Tente transformá-las em 100 DATA DF2DBL2UE2UBR2 DF ND 2 EU ,
Para utilizar esse conjunto é necessá-
movimentos de BR2 R3G3DH3BU4BR2 rio definir a mensagem a ser escrita, as-
lápis, como fez anterior-
,

110 DATA NR2D4R2U4BR2 BDEND4BR2


sim como a posição inicial, a cor e o ta-
,
mente, lembrando-se de que B significa
R2D2L2D2R2BU4BR2 NR2BD2NR2BD2H
espaço em branco; assim, nenhuma li-
,

2U4BR2 D2R2D2U4BR2 NR2D2R2D2L2B


,

manho. A
linha 130 coloca em AS uma
nha aparecerá no desenho quando uma
.

E4.D4R2U2L2BE2BR2. R2ND4BR2 NR2D


.

mensagem de teste — TESTANDO0123


instrução for precedida de B. 4R2U2NL2U2BR2.NR2D?R2D2U4BR2
,

456789 —
que pode ser substituída por
Se vocêquiser exibir em telas de grá- 120 SCREEN 1.0 qualquer outra de sua criação. A linha
ficos outras palavras ou expressões — 130 AS""TESTANDO01234S6789" 140 estabelece a posição inicial, a cor e
QUE AZAR! ou BEM FEITO 1, por 140 DRAW "BM60 50C3S8" ,
o tamanho. Com a mensagem e suas ca-
exemplo — poderá estabelecer mais cor- 150 GOSUB 9000 podemos dizer à
racterísticas definidas,
dões, tais como QAS e BFS. Tente ela- 160 GOTO 160 máquina que desenhe a mensagem. A
borar as instruções para uma dessas ex-
9000 FOR K-l TO LEN (AS)
9010 BS-MIDS!AS,K,1)
sub-rotina de impressão que começa —
pressões em papel gráfico. Uma vez que
9020 IF BS>-"0" AND BS<-"9" THE na linha 9000 — examina cada caractere
tenha definido os cordões, você poderá N DRAW NUS (VAL (BS) GOTO 9050 ) :
em AS, um por vez, acha as instruções
chamá-los de volta sempre que forem 9030 IF BS"" " THEN N-0 ELSE N- apropriadas nos conjuntos (veja progra-
I necessários ao programa. ASC(BS) -64 mação de jogos, na página 101) e, em
I O ALÔ! é traçado pela linha 50. A 9040 DRAW LES(N) seguida, desenha o caractere na tela.
" ,

IIIIIIIIIHHH lllllllll
Modificando A$
na linha 130 e, se a partir de um
único conjunto de instru- tando ao cordão todos os parâmetros
necessário, a posição inicial na linha ções. Não será necessário, portanto, in- gerados na linha 60. A função STRS
140, podemos desenhar a mensagem que formar ao computador como desenhar converte as variáveis numéricas em cor-
quisermos. Como a parte do programa cada versão. dões — na verdade, coloca o valor des-
que iraça as letras é uma sub-rotina, te- Para ver como esse recurso funciona, tas variáveis entre aspas. Por exemplo,
remos quantas mensagens desejarmos, digite e rode o programa a seguir. se D = 2, então STRS = "2".
mas devemos colocá-las sempre em AS. A linha 70 move, então, a "'caneta"
O procedimento será muito útil, so- para uma posição qualquer e, usando
bretudo se tivermos uma série de men- uma cor aleatória, desenha, na direção
sagens para exibir em diversos pontos da escolhida ao acaso, as instruções conti-
10 PMODE 3,1
tela durante um jogo. das em SS. O X antes de SS significa
20 PCLS
Comece seus programas na linha 120, 30 SCREEN 1,0 "execute as instruções contidas em SS"
ou seja, acima das linhas DATA; lem- 40 SS-"NR16E8F4U4R2D6F2D12L6U6L e permite a adição de um cordão a ou-
bre-se, porém, de que as linhas DIM, 4D6L6U12" tro durante o desenho, sem a necessida-
CLEAR ou PCLEAR em geral precisam 50 FOR K-l TO 20 de de utilizar o sinal '" + ".
ficar no início. Quando quiser escrever 60 D-RND(200)+27:E-RNDU40)+27: O emprego do X apresenta a vanta-
uma mensagem, estabeleça cordões com C-RND(3)+1:A-RND<4)-1 gem de economizar a "memória de cor-
as palavras escolhidas apenas no ponto
70 DRAW"BM-+STR$(D)+","+STRS(E} dões" da máquina —
que é limitada —
+"C"+STRS (C) +"A'+STR$ (A) +-XSS ;

pois permite unir cordões sem criar no-


em que elas forem necessárias ao progra- 80 NEXT K
ma. Em seguida, acrescente o DRAW, vos cordões. O uso do " + ". ao contrá-
90 GOTO 90
como na linha 140, e chame a sub-rotina rio, cria um novo cordão, que vai ocu-
de impressão com GOSUB 9000. par boa parte da memória que estamos
querendo economizar.

30 SCREEN 2
40 SS-"NR16E8F4U4R2D6F2D12L6U6L
4D6L6U12'
50 FOR K-l TO 20
Uma vez elaboradas as instruções pa- 60 D-INT(RNDU)*200)+28:E-INT(R
ra desenhar um perfil, podemos posicio- ND(1)*140)+28:C-INT(RND(1>*15)+
ná-lo em qualquer direção, ou mesmo 1:A-INT(RNDU)*4)
de cabeça para baixo. Basta, para isso, 70 DRAW -BM"+STRS(D)*"."+STRS<E
incluir uma nova instrução no cordão:
)+"C"+STRS{C)+"A"+STRS(A)+"XSS;
A, seguida de um valor de 0 a 3.
AO posiciona o desenho —
no nosso
exemplo, a casa —a 0 graus, ou seja, E possível colocar textos na tela grá-
na vertical. Al desenha a casa deitada Serão desenhadas 20 casas, todas fica do Apple II?
sobre seu lado direito —
a 90 graus. A2, iguais, exceto na cor e na orientação. Infelizmente, os microcomputado-
de cabeça para baixo —
a 1 80 graus. A3, O formato das casas é definido na li- res compatíveis com a linha Apple II

finalmente, traça a casa deitada sobre nha 40. Na linha 60, quatro números não permitem misturar texto e gráf ic
seu lado esquerdo —
a 270 graus. aleatórios são escolhidos: eD E são as na mesma tela. Essa limitação reduz
bastante o campo de ação do iniciante
O controle da direção em que a ima- coordenadas da posição inicial.Céacor,
que quer desenvolver jogos ou outros
gem é traçada permite obter o mesmo e A, a direção da imagem.
tipos de programas gráficos que preci-
desenho, de quatro maneiras diferentes. A linha 70 desenha a casa, acrescen- sam de alguma espécie de titulo ou
identificação na tela.
Como os computadores da lir
MSX e TRS-Color. os micros da lir
Apple II também dispõem de um i

mando DRAW. Porém, se o objetivo


deste recurso é semelhante em todos
os computadores mencionados, a fili
sofia de sua utilização é bastante difi
rente, quando se trata do Apple.
O funcionamento do comando
DRAW do Apple baseia-se nas tabelas
de forma {shape tables). que residem
em uma certa parte da memória e que
determinam um verdadeiro "mapa" de
movimentação do cursor gráfico, com
base em números binários que identi-
ficam quais os bits que devem ficar
acesos ou apagados na tela. A especi-
ficação de tabelas de forma será expli-
cada em um artigo futuro. Basta saber,
por enquanto, que letras e números de
qualquer tamanho podem ser desenha-
dos na tela, um a um, com o comando
O Speclrum usa arcos e círculos para desenhar um campo de golfe. DRAW
IIIIIIIIIIIIHI 7DIMÀ0UIN laiiiiiiiinii

ÂSSEMBLER Traduzir mnemónicos Assembly para


código de máquina é uma tarefa

extremamente cansativa. Deixe o Apple

PARA O APPLE trabalhar por você: ele o fará

com rapidez e facilidade.

O Assembler do Apple é bem mais 160 HOME HTAB 16: VTAB 1: IN


: 430 FOR I I + 3 ( A3C (OPS
curto do que os programas correspon- VERSE PRINT "MENU" NORMAL
: : : ) - 65) TO 76: IF OPS - KS(I) T
dentes para o Spectrum, o e o MSX PRINT PRINT
: PRINT !
HEN 490
TRS-Color. Isto ocorre porque seu mi-
170 PRINT TAB { 10);"1 - LER O 440 NEXT IF : PS - 3 THEN PRI
croprocessador o 6502 tem bem — — DISCO": PRINT PRINT TAB 10
);"2 - GRAVAR NO DISCO* PRINT
:

:
( NT OPS
450 IF LEFTS (IS.l) - "." THE
menos instruções que o Z-80 e o 6809, os PRINT TAB 10);"3 - MONTAR" -
:
( N IS - RIGHT3 (IS. LEN (IS)
microprocessadores das outras máquinas. 180 PRINT PRINT TAB 10); "4
: ( 1)
Este programa não precisará traba- - EDITAR LIMHA": PRINT PRINT : GOSUB 1010:RR(Q2) - P: IF
460
lhar com a infinidade de mnemónicos do TAB 10); "5 - APAGAR LINHA":
( IS .THEN 290
Z-80, nem terá de calcular os pós-bytes PRINT PRINT TAB 10); "6 - LI
: t 470 IF PS - 3 THEN PRINT "(LI
do 6809. STAR" NHA NAO RECONHECIDA)
Devido ao seu tamanho, ele é mais 190 PRINT PRINT TAB 10);"7
:
( 480 GOTO 2B0
rápido —
o que não significa, porém,
- SAÍDA": PRINT
T TAB
PRINT PRIN : : 490 ADS - "»0":R - 0: IF K2(I)
10) ;-SELECIONE A OPCAO
( < > 0 THEN GOSUB 910: ADS - IS
que sua velocidade seja comparável à
dos programas escritos em código. Ele :OP - K2(I)
200 GET AS: IF VAL (AS) < 1 O 500 IF PS - 3 THEN PRINT " "i
levará alguns minutos para traduzir um
R VAL (AS) > 7 THEN 200 OPS;: IF K2(I) < > 0 THEN PRI
longo programa em Assembly. 210 JJ - VAL IAS HOME ) : NT " ",-ADS;
E bom lembrar que o TK-2000 já vem 220 ON JJ GOSUB 1080,1100,250, 510 IF LEFTS (ADS.l) - TH
com um míni-Assembler embutido. 1120,1200,1230.1300: PRINT PR : EN ADS - RIGHT9 (ADS. LEN (ADS
INT "QUALQUER TECLA PARA CONTIN ) - 1) :OP - Kl (I)
UAR- 520 IF RIGHTS (ADS.l) < > ")
230 GET AS: IF AS - "" THEN 23 " THEN 530
0 525 OP - OP - 20:ADS - MIDS (A
240 GOTO 160 DS.2. LEN (ADS) - 2): IF OP 4
250 K0 - 0:K9 - 0:PS - 0:PO - 0 B THEN OP - 100
260 PS - PS + 1: IF PS < - 3 T 530 IF RIGHTS (ADS, 2) - ";X"
10 HOME HEN K - K0:P - PO: PRINT "ETAPA THEN OP - OP + 16:ADS - LEFTS
Z0 DIM KS(77) ,K1<77) ,K2(7?) :HS ";PS: GOTO 280 (ADS, LEN (ADS) - 2)
- "01234567B9ABCDEF":R3 • CHR 270 PO - P: RETURN 540 IF ADS - "A" THEN ADS"0":O
S (13) 280 GOSUB 980 P - OP + 4
30 DIM TS(200) ,BB(100) ,ZS(100) 290 GOSUB 910:OP3 - IS: IF LE 550 IF RIGHTS (ADS. 2) < > ";
40 P - 0: FOR II - 1 TO 76: REA FTS (OP3.1) - "*" AND PS - 3 TH Y- THEN 5B0
D KStII) .Kl(II) ,K2(II) IFKStI EN PRINT OPS 560 OP - OP + 16: ADS - LEFTS
D < > -• THEN NEXT
:

300 IF LEFTS (OP3.1) - "*" TH ADS, LEN (ADS) -2): IF RIGHTS


<

50 DATA ADC, 105. 101. AND, 41, EN 280 (OPS.l) < > "X- THEN OP - OP
37 ,ASL, 6 RCC 144 ,BCS, 176 BEQ
, . , , , . 310 IF OPS - "END" AND PS - 3 - 4:R - 65536
,240. BIT, 36.BMI. ,48
, , THEN PRINT PRINT " FIM. ENDE
: 570 IF RIGHTS (ADS.l) - ")" T
60 DATA BRK BYT - 256 , . , ,
,
RECO FINAL: ";P - 1 HEN ADS - MIDS (ADS, 2, LEN (AD
70 DATA BNE 208 BPL ..16, BVC , , , 320 IF OPS » "END" THEN 260 3) - 2) :R - R - 65536
, 80.BVS. .112.CLC24. ,CLD, 216,
,
, 330 IF OPS < > "ORG" AND OPS SBO S - 1
CLI,8B.,CLV,184. < > "PÍ-" THEN 370 590 IF ADS - "" THEN 770
80 DATA CMP, 201 197 ,CPX. 224, , 340 GOSUB 910:3 - 0: IF LEFTS 600 X3 - LEFTS (ADS.l): IF LE
28, CPY, 192, 196, DEC, ,19B.DEX.202 (I3.D - •** THEN S - P:IS - N (ADS) - 1 THEN BDS - "": GOTO
.DEY.136, ,EOR, 73,67
. RIGHT3 (IS, LEN (IS) - 1) 610
90 DATA INC, .230, INX.232. IKY , 350 P - VAL (IS) + S: IF PS - 605 BDS - RIGHTS (ADS, LEN (AD
,200. .JMP, ,68.J3R. ,24 3 THEN PRINT ORG";P 9) 1)
100 DATA LDA, 169, 165. 360 GOTO 280 610 IF XS - THEN H R * P
LDX.162.166.LDY 370 IF P - 0 THEN PRINT "FALT " 3:ADS - BDS: GOTO 580
110 DATA 160.164 ,LSR. ,70 A ORG" :RETURN 620 IF XS - "+" THEN ADS - BDS
NOP. ,234 ORA, 9,5. 380 IF OPS < > "SPt-" AND OPS : GOTO 590
PHA, 72. ,PLA, 104, PLP , < > "TXT" THEN 420 630 IF XS - *- THEN ADS - BDS
120 DATA 40..PHP.B ROL 390 GOSUB 910: IF PS 3 THEN :S - - S: GOTO 590
. . 38. ROR, ,102 PRINT " TXT";I9i TAB ( 20); 640 Q - 0
1 30 DATA RTI 64 . . RTS 96 SBC , , , , 400 FOR J • 2 TO LEN (IS):BY 650 IF (XS C > "9" AND XS <
,233,229,SEC,56, ,SED, 248, .SEI. - A3C ( MIDS (IS + IS.J.ll) I : > "l") OR BDS < "0" OR BDS > -
20 ,STA, 133. STX. 134
, , , F J > - LEN (IS) THEN BY - 13 "G" THEN 690
140 DATA 3TY , 132 ,TAX. 170, TA , , 410 GOSUB 870: NEXT J: GOTO 28 660 FOR Q2 - 0 TO 15: IF LEFT
Y, 168, ,TSX, 186, .TXA,138, ,TXS,15 S (BDS.l) < > MIDS (H3.Q2 1
|4, .TYA.152. .1) THEN 680
|l50 DATA WOR, ,-256,*, 670 Q - Q * 16 + Q2: IF LEN (B
Illllllllll» » CÓDIGO DíMAQUINÂ ,0 IIIIIIIHI!
TRADUÇÃO DE MNEMÓNICOS MANIPULAÇÃO
ASSEMBLY PARA CÓDIGO DE RÓTULOS
HEXADECIMAL TRANSFERENCIA DO PROGRAMA
CALCULO DE SALTOS EM CÓDIGO
E DESVIOS PARA A MEMÓRIA

- 1) • 4
77Z RP = fi - P - 2:RP - ABS (
ABS ((RP < 0) « INT (RP / 256)
) * 256 - ABS (RP - (RP > - 2
56) » 256 * INT (RP / 256)))
775 IF LEFT3 (OPS.l) • "B" AN
D (0 - PP AND OP > 0) THEN R -

0 IF LEFT3 (OPS.l) - "J" OB


LEFTS (OPS.l) » "W" THEN R
+ 65536
790 IF B > 255 THEN OP - OP
8
800 K2 - K2(I):PA - ABS ABS (

((OP < 0) « INT (OP / 16)) «1


6 - ABS (OP - (OP > - 16) * 1
6 * INT (OP / 16)))
805 IF PA - 10 THEN Y2 - 0
BIO IF PS - 3 THEN PRINT TAB
( 16);:BY - P / 256: GOSUB 890:
BY - P - 32768: GOSUB 890: GOSU
B 850
820 IF OP > - O THEN BY - OP
/ 256: GOSUB 870 BY - OP GOSUB : :

B80
830 IF K2 - O THEN 280
840 GOSUB 850 :BY R - 256 *
INT (B / 256): GOSUB 990 BY - B :

/ 256: GOSUB B70: GOTO 280


850 IF PS - 3 THEN PRINT " "i
860 RETURN
870 IF INT (BY) < - 0 THEN
RETURN
880 P - P + 1:YY - ABS ABS ( {

(BY < 0) * INT (BY / 256)) • 2


56 - ABS (BY - (BY > - 256) *
256 * INT (BY / 256) ) IF PS ) :

- 3 THEN POKE P - l.YY


890 BY - ABS ( ABS (BY < 0) * (

INT (BY / 256)) 256 - ABS


(BY - (BY > - 256) 256 « IN
T (I / 256)))
895 YY - ABS ABS ( (BY < 0) * (

INT (BY / 16) ) 16 - ABS (B


Y - (BY > - 16) * 16 * INT (B
Y / 16))) IF PS - 3 THEN : PRIN
T MID3 (HS.BY / 16 + 1,1); MID
3 (H3.YY + 1,1)
900 RETURN
"": GOTO 660 730 IF ADS < "O" ADS "9" 910 IF K > N THEN 13 - *END*
D9) - 1 TREM BDS Ofi >
675 BDS - RIGHTS (BDS. LEN <BD THEN 750 RETURN
S) - 1) GOTO 660
:
740 Q - Q * 10 + ASC (ADS) - 4 920 Kl - K9 + 1: IF K9 > - LE
680 NEXT :B « B + Q • S:ADS - 8: IF LEN (ADS) - 1 THEN ADS - N (TS(K)) THEN IS "/FALTANDO/
BDS ! GOTO 530 --; GOTO 730 RETURN
i

690 IF XS < *A" OB XS > "Z* TH 745 ADS - RIGHTS (ADS LEN (AD
• 930 K9 - Kl: IF MID3 (T3(K),K1
EN 720 S) - 1): OOTO 730 ,1) - " " THEN 920
700 IS - ADS GOSUB 1010: IF IS
-
750 R - R + g * S: GOTO 580 940 IF K9 > LEN (TS(K)) THEN
< > -- THEN GOSUB 1050 760 IF PS - 3 THEN PRINT " (EN IS - MIDS (TS(K),K1.K9 - Kl):
710 fi - R + BR(Q2) S:AD3 - IS DERECAMENTO INVALIDO) * RETURN
: GOTO 5B0 770 PP - (OP - ( ABS (OP) > - 950 IF MIDS (TS(K),K9,1) < >
720 IF XS < "O" OR XS > "9" TH B) * 8 « INT (OP / 8) > - 4) " " THEN K9 - K9 + 1 GOTO 940 : I

EN R - 0: GOTO 760 * 4 + (OP > - - 4 AND OP < - 960 IS - MIDS (TS(K),K1.K9 - X |


iiiiiiiiiinm«H^v»'«" " 'iiiiiiiii
tá vazia. CTRL + D é um caractere de mente escrever a nova, com o mesmo
970 RETURN controle para uso do disco. número no modo de edição.
980 IF K9 < - LEN (T3(9J) AN
D PS - 3 THEN IF LEN (T3(K))
Quando estivermos satisfeitos com o
> K9 - 1 THEN PRINT RIGHTS (T COMO FUNCIONA 0 PROGRAMA programa em Assembly que digitamos,
3(K) . LEW (TS(K) ) - K9 + 1) podemos acionar a opção de "monta-
990 K - K + 1:K9 0: IF PS 3 gem" do programa. O Apple mostrará,
THEN PRINT Uma vez digitado o programa, rode- então, os mnemónicos acompanhados
1000 RETURN o. Normalmente, ele é colocado na área dos códigos hexa correspondentes, ao
1010 X3 » •" livre da memória que vai de 300 até 3EF, mesmo tempo em que coloca estes có-
,1020 IF 13 < "A" OR 13 > - "I em hexa, ou de 768 até 1007, em deci- digos na memória.
" THEN 1040
mal. Se quisermos colocá-lo em código Pode-se gravar o Assembler em fila
1030 X3 - X3 + LEFTS (13.1) I
LEN £13) - 1 THEN 13 - "": G
em outro local, devemos proteger esta ou disco, como qualquer outro progra-
F
OTO 1020
área da memória (veja página 88). ma (veja página 53). Os mnemónicos —
1035 13 - RIGHTS (13. LEN (13) Depois que o programa for rodado, ou programa fonte —
devem ser grava-
- 1) GOTO 1020
r
surgirá um menu na tela. Para entrar um dos e lidos em disco usando as opções
1040 IF IS < > *" THEN RETURN programa em Assembly, deve-se esco- correspondentes.
1050 FOR 02 - 1 TO VV: IF XS - lher a opção 4, que diz "EDITAR LI- O programa em código, por sua vez.
ZSÍQ2) THEN 1070 NTíA". O Assembler usa linhas BASIC pode ser gravado em fita ou disco utili-
1060 NEXT :W - + 1:Z3(W] W com números múltiplos de 10.
— —
zando-se o monitor do Apple, ou por
- XS:Q2 - W:RR(W) - 32768 A primeira linha número 10 de- meio do comando BSAVE.
1070 RETURN ve conter o endereço inicial do progra- Para rodá-lo, deve-se sair do Assem-
1080 INPUT "NOME DO ARQUIVO "; ma em código. Ela ficará mais ou me- bler, por meio da opção "SAÍDA", e
ARS:DS - "*! REM CTRL-D nos como esta: digitar:
1090 PRINT D3:"0PEN";AR3: PRIN
T D3 *READ" ARS
;
INPUT N FOR J
- 1 TO N: INPUT TS(J)
; i

NEXT !
!

!
10 org 800 CALL 800
PRINT D3; "CLOSE* AR3 RETURN ; :

...determinando que o programa em


1100 INPUT "NOME DO ARQUIVO ";
AR3:D3 - "": REM código seja colocado na memória a par-
CTRL-D
tir deste endereço. Se tivermos protegi-
1110 PRINT D$; "OPEN" ;AR3: PRIN
T DS:"WRITE";AJl$: PRINT N: FOR do outra área da memória para colocar
J - 1 TO N: PBINT TS(J): NEXT : nosso programa em código, a origem
PRINT DS; "CLOSE" ;Afl$: RETURN deve ser o endereço inicial daquela por-
1120 K - 0: INPUT "QUAL O NUM ER ção da memória.
O DA LINHA " ;K: HOME Depois da primeira linha, os núme-
1140 IP3 - "": PRINT K INPUT ; : ros de linha múltiplos de dez aparecem
IP$: IF IP3 - "" THEN RETURN automaticamente, toda vez que se pres- O que fazer quando um programa
1150 K2 - K / 10: IF K2 > N THE longo — como este Assembler — não
siona a tecla RETURN. Cada linha de-
N K2 - N + 1:N - N + 1 funciona depois de digitado?
ve conter apenas um mnemónico e seus
1160 IF K2 < .1 THEN K2 - . Mesmo o programador mais expe-
operandos. Caso se pretenda inserir uma riente tem problemas ao digitar progra-
1170 IF K2 - INT <K2> THEN 11
90 linha entre duas já existentes, utiliza-sé mas longos. Sempre se comete algum
1180 K2 - INT (K2) + li KOR K3 um número de linha intermediário e — erro, e é muito difícil localizá-lo.
- N TO K2 STEP - 1:TS(K3 + 1) o programa se encarrega da inserção. Os A maioria dos erros provoca uma
- TSÍK3) NEXT :N - N + 1
:
rótulos, ou labels —
que indicam os lo- mensagem que orienta o programador
1190 T3(K2) - IP3:K - K + 10: G cais para onde o programa será desvia- na direção correta Iveja página 141 1,
OTO 1140 do—, devem ficar no inicio da linha,
Mas programas longos seguem cami-
1200 K - 0: INPUT "QUAL 0 NUMER precedidos de um ponto. Os rótulos pre-
nhos tortuosos, entram em laços e fa-
O DA LINHA ";K:K2 - K / 10 zem saltos, de modo que o número de
cisam ter mais de uma letra e não po- linha indicado na mensagem de erro al-
1210 IF K2 > N OR K2 < 1 OR K2
dem ser iguais a nenhum mnemónico. gumas vezes não ajuda em nada.
>, INT (K2) THEN RETURN
1220 FOR K3 - K2 TO N:TS(K3) - São empregados mnemónicos padrão do Par tudo isso, é necessário contar
T3ÍK3 + 1): NEXT :N - N - 1: R 6502, com uma exceção: o uso do com uma função de rastreamento, co-
ETURN ponto e vírgula no lugar da virgula. Is- mo a função TRACE, disponível no Ap-
1230 IF N - 0 THEN RETURN to é necessário porque o programa uti- ple. Com ela podemos ver o número da

1240 K - 0:K2 - 0: HOME a instrução INPUT para receber as linha que está sendo executada, o que
INPUT : liza
"QUAL A PRIMEIRA E A ULTIMA LI Uma vírgula provocaria a men-
linhas.
torna mais fácil diagnosticar os erros.
Para utilizá-la, basta digitar TRACE no
NHA "iK.K2:Kl - K / 10:K2 - K2 sagem de "EXTRA IGNORADO".
/ 10 modo imediato, isto é, sem número de
Caso deseje evitar a tradução de uma linha na frente. Depois, rode o progra-
1250 IF K2 > N THEN K2 - N linha, coloque um asterisco antes dela.
1260 IF Kl < 1 THEN Kl - 1 ma e veja o rastreamento em ação. A
1270 HOME FOR K3 - Kl TO K2
:
Ao pressionar RETURN, surgirá a pró- função é desativada por NONTRACE.
PRINT " ";K3 « 10:" ";TS(K3>: xima linha, mas se a mesma tecla for Assim, não descarte o programa se
NEXT RETURN
:
pressionada novamente, sem que qual- ele não funcionar na primeira tentati-
1300 END quer coisa tenha sido escrita na linha, va. Procure pelos erros mais comuns.
o programa retornará ao menu. Se ocorrer um "OUT OF DATA", por
Nas linhas 1080 e 1 100, a variável DS O menu fornece a opção de listar o exemplo, verifique com atenção suas
deve comer o caractere produzido pelas linhas DATA. Se você tiver esquecido
programa. Se outra tecla for pressiona-
<D> um número, ou mesmo uma vírgula, o
| ledas <CTRL> e pressionadas da, volta-se ao menu. Podemos também
programa não funcionará.
o tempo. DS, portanto, não es- optar por apagar uma linha, ou simples-
IIIIIIIIIIIHH lllllllll
COMPARE E CLASSIFIQUE
CORDOES ALFANUMÉRICOS
COMO FRACIONAR CORDÕES
CORDÕES
UTILIZE PARA
PROCESSAMENTO DE PALAVRAS

quando se utilizam certas funções e de- UTA. QUE FRUTA SOU EU?"
Empregadas em quase todos os tipos de
90 INPUT AS
clarações no BASIC da
disponíveis
programas, as cadeias de 100 IF AS-BS THEN GOTO 160
maioria dos computadores. 110 LET G-G+l
caracteres (ou cordões) são muito úteis Conhecida como concatenação, a 120 PRINT "ERRADO"
com mais simples dessas operações consiste 130 FOR J-l TO 200
para quem quer trabalhar
em unir cordões. Para efetuá-la, empre- 140 NEXT J
algo mais do que simples números. ga-se o símbolo " + ". Assim, se A$ for 150 GOTO 90
igual a "TUDO" e B$ igual a "BEM", 160 1F G-l THEN PRINT "VOCE A
então AS + BS será "TUDO
BEM". CERTOU NA PRIMEIRA TENTATIVA*
Um cordão (ou slring, em inglês) é, A concatenação junta os cordões sem STOP
acrescentar nada a eles. Assim, "439" +
170 PRINT "VOCE ACERTOU APOS *
como já vimos, um conjunto de carac-
"241" é igual a "439241" e não a 680. :G:" TENTATIVAS"
teres. Estes,por sua vez, podem ser le- 180 STOP
tras,números, sinais de pontuação ou
quaisquer outros símbolos disponíveis
no teclado.
Normalmente, um cordão contém
uma ou mais informações úteis, ou mes-
COMO COMPARAR CORDOES

Assim como é capaz de concatenai


DO
10 G-l:ON RNDI6) GOTO 20,30.40,
mo partes de informação. Por exemplo, cordões, o computador pode compará- 50,60,70
los para verificar se são iguais, como
20 BS- "MACA" GOTO 90
O cordão "PEDRO SILVA 241067 S" :

30 BS"" LARANJA" GOTO 80


:

engloba diversos dados sobre uma úni- nesse simples jogo de adivinhação.
40 BS-"BANANA" :GOT0 60
ca pessoa: nome, sobrenome, data de 50 BS-"LIMA0" :GOT0 80
nascimento e estado civil. Esses dados 60 BS" "FRAMBOESA" GOTO 80 :

são considerados como uma mesma co- 70 B$-"ABACAXI"


municação. A data de nascimento pode Este programa funcionará no ZX-81 80 CLS PRINT" EU SOU UMA FRUTA.
i

ser dividida em dia, mês e ano: assim, ;e você separartodas as linhas de decla- QUE FRUTA SOUEU?"
na verdade, existem no total seis partes ações múltiplas. 90 INPUT AS
distintas de informação. 100 IF AS=BS THEN GOTO 160
Em casos como o do exemplo acima, 10 LET G-l GOTO INT {RND*6) 110 G-G+l
10+10 120 PRINT" ERRADO í

faz-se necessário fracionar o cordão pa-


20 LET BS-' MACA* GOTO 80
: 130 FOR J-l TO 1000
ra extrair as diferentes partes da comu- GOTO 80 140 NEXT J
30 LET BS-' LARANJA"
nicação. Em outros, ao contrário, po- 40 LET BS"' BANANA" GOTO 80 :
:

150 GOTO 90
de ser necessário unir dois ou mais cor- 50 LET BS-' LIMÃO" GOTO 80 : 160 IF G=l THEN PRINT"VOCE ACER
dões. Há casos, ainda, em que se torna 60 LET B$"" FRAMBOESA" : GOTO TOU EM UMA TENTATIVA" ELSE PRIN
imprescindível medir a extensão de um T"V0CE ACERTOU APOS" G "TENTATI ;
;

cordão (número total de caracteres) e VAS"


calcular o valor de algumas de suas par-
tes numéricas. Tudo isso é possível
IIIIIIIIHUH llllllllll
IF AS= "SIM" THEN PRINT "VOCE da no cordão AS e fornece tantos carac-
TEM CERTEZA?" teres quantos forem especificados no
5 R-RND(-TIME) A
condição não scra satisfeita se a pa- número entre parênteses. Se AS for "SR
10 G-l:ON INT(RNDU)*6)+1 GOTO lavra "sim" for digitada com letras mi- MÁRIO SILVA" c você especificar dois
20,30.40,50.60.70 núsculas. caracteres — LEFTS (AS.2) — , o resul-
20 BS-"MAÇA" :GOT0 80 tado será "SR".
30 B5-"LARANJA" :G0TO 80 De igual modo, o comando RIGHTS
40 BS - " BANANA" GOTO 80 ORDENAÇÃO DE CORDÕES
:

conta a partir da outra ponta do cordão


50 BS-"LIMÂ0" :G0TO 80
60 BS-"MARACUJA" GOTO 80
— ou seja, de seu final à direita. Assim,
:
As cadeias de caracteres também po- RIGHTS (A$,5) produzirá "SILVA".
70 BS- "ABACAXI ": GOTO 80
80 CLS PRINT"AdlVÍnhe
: que frut
:
dem ser comparadas utilizando-se os si- Com o MIDS você pode especificar
nais dc desigualdade < e > em linhas dois parâmetros: a posição inicial no
90 INPUT AS como essa: cordão, e o número de caracteres a se-
100 IF AS-BS THEN 160 IF AS<BS THEN PRINT "O PRIMEIRO rem extraídos. Por exemplo, MIDS
110 G-G+l É " ;AS (AS,4,5) começará no quarto caractere
120 PRINT"Voce errou!" M e pegará cinco caracteres, produzin-
130 FOR J- 1 TO 600 Aqui, a condição AS<BS pergunta do "MÁRIO". Se for especificado so-
140 NEXT se o cordão em AS vem antes do cordão mente um número, tal como em
150 GOTO 90
160 IF G-l THEN PRINT"Você acer em BS, quando eles são colocados em MIDS(AS,4), a função retornará todos
tou na primeira!" ELSE PRINT"Vo ordem alfabética. Mas lenha cuidado: os caracteres daquela posição, até o fi-
c6 tentou" ;G; "vezes até acertar o computador coloca cordões em ordem nal do cordão.
alfabética, examinando o código ASCII O método empregado pelos micros
de cada uma das letras ou caracteres que da linha Sinclair, tais como o ZX-81 e
compõem o cordão; por exemplo, a le- o ZX Spectrum, é mais simples e dire-
tra A no código ASCII equivale a 65 e to. Nesses computadores, existe apenas
Copie o programa anlerior sem a li- Z, a 90. O problema é que as letras mi- uma função para manipulação de cor-
nha 5 e croque CLS por HOME. Modi- núsculas também possuem códigos AS- dões: o comando TO. Por exemplo. AS
fique a linha 160 e adicione a 170 como CII: o a é 97 e o z, 122. Assim, todos (número TO número). AS identifica o
se segue: os cordões que começarem com letras cordão a ser fracionado e os dois parâ-
maiúsculas serão colocados em primei- metros correspondentes ao início e ao
160 IF G-l THEN PRINT"Voce acer ro lugar. fim do sub-cordão a ser extraído.
tou na primeira! " :END
170 PRINT"Voce tentou ";G;" vez
Para complicar ainda mais, sinais de Usando o mesmo cordão do exemplo
pontuação, espaços e outros signos tam- anterior, AS = "SR MÁRIO SILVA",
bém possuem códigos ASCII; dessa for- AS(1 TO 2) dá a você "SR", AS (4 TO
Aqui, a linha 10 coloca o contador ma é difícil prever em que ordem ficará 8) fornece "MÁRIO" e A$(10TO 14)
de palpites em 1 e "lança" em seguida um cordão constituído por diversos produz "SILVA". Não é necessário es-
um dado eletrônico, que serve para se- signos. pecificar os números na função acima.
lecionar uma fruía, ao acaso. As opções Com o devido cuidado, os operado- Se for omitido o primeiro, o sub-cordão
são armazenadas nas linhas 20 a 70. res de maior (> )e menor (<), ainda po- a ser extraído se iniciará no primeiro ca-
Qualquer que seja a linha que o com- dem ser utilizados para organizar cor- ractere. Se o segundo for omitido, a fun-
putador passe, ele armazena a fruta co- dões em ordem alfabética. Uma rotina ção extrairá até o final do cordão.
mo um cordão em BS e vai para a linha de ordenação alfabética, que aplica a Eis aqui um programa que utiliza to-
80. Nesse ponto você tem que adivinhar chamada técnica dc ordenação por bo- das as funções explicadas acima. E um
qual fruta foi sorteada e digitar seu pal- lhas, será explicada mais adiante numa jogo de palavras para duas pessoas.
pite, que será armazenado em AS e com- lição sobre estruturação de programas.
parado com BS. Se estes forem iguais,
o computador imprimirá: "Você acer-
tou na primeira!", ou "Você tentou
COMO FRACI0NAR CORDOES
(tantas) vezes até acertar...". Se A$ não
for igual a BS o computador imprimi- É possível também separar
rá: "Você errou"; nesse caso, uma no- um caractere ou uma sequên-
va tentativa deve ser feita. cia de caracteres de um cor-
Mesmo que você adivinhe o nome da dão. Nos computadores
fruta, a condição AS = BS não será sa- TRS, MSX c Apple II is-

tisfeita se você escrevê-lo de modo in- so é feito utilizando-se


correto. Para que o computador consi- funções LEFTS, RIGHTS
dere dois cordões iguais, eles devem ser e MIDS. Já o Spectrum
graficamente idênticos —
isto é. letras, aplica uma técnica dife-
espaços, sinais de pontuação e números rente.
devem ser iguais. A função LEFTS (AS,
Uma das funções dessa técnica é ve- mimem) toma caracteres a
rificar entradas: partir do primeiro à esquer

ES D ET Y PI ST AGENCYZ
"; ; " : "

IIIIIIIIIUHH lllllllll
190 PRINT "MUITO BEM!" '
90 M-INT(RND(1)*(N-1))+1
Uma delas entra uma expressão cujas le-
195 IF g = l THEN PRINT "VOCE P 100 A5-AS+MIDS(WS.M.l)
iras serão embaralhadas e impressas pe-
110 U$-LEFTS(WS.M-l)+MIDStWS,M+
RECISOU DE UMA TENTATIVA " !

lo computador como um anagrama pa- GOTO 210 1)


ra o segundo jogador resolver. 200 PRINT "VOCE PRECISOU DE "; 120 NEXT
g;" TENTATIVAS" 130 LOCATE 4.12:PRINT"0 anagram
210 PRINT '"SUER JOGAR OUTRA V a é: " ;AS

EZÍS/N)?" 140 LOCATE 4 14 PRINT"Que palav


, :

"
220 LET aS-INKEYS: IF aSO"S" ra é esta?
10 cts 160 INPUT GUESSS
AND a$<>"N" THEN GOTO 220
20 PRINT @ 7 5, "ANAGRAMA" 170 G-G+l
PALAVRA 230 IF a$-"S" THEN RUN
30 PRINT 6161. "DIGITE A 180 IF GUESSSOWOS THEN PRINT
*

A SER EMBARA LHADA" Errado! Tente novamente .*: COTO


40 AS-INKEYS:IF AS"" " THEN 40
43 IF AS-CHRSU3) THEN 55
í:ímj 160
190 PRINT :PRINT"Mui to bem!"
46 IF AS<" " THEN 40 10 HOME 200 IF G-l THENPRINT"Voc« acert
49 WS=WS+AS:GOTÔ 40 20 HTAB 5: VTAB 2: PRINT "PROG ou na primeira!" ELSE PRINT"Voc
55 UORDS-WS RAMA DE AN AG RAMAS 6 tentou";G;"vezea."
70 CLS 30 VTAB 5: PRINT "DIGITE UMA P 210 PRINT:PRINT:PRINT"Voce joga
80 FOR N=LEN(WS)T0 1 STEP -1 ALAVRA PARA SER MISTURADA:" outra vez? tS/N)
90 M-RND(N) 50 INPUT WS 220 AS-INKEYS:IF AS<>"S" AND AS
100 AS=AS+MIDS(WS,M.l) 55 MOS - WS <>"N" THEN 220
110 WS-LEFTS(WS.M-1)+MIDS(WS,M+ 70 HOME 230 IF AS- "S" THEN RUN
1) 80 FOR N - LEN (WS) TO 1 STEP
-
240 END
120 NEXT N 1
130 PRINT 665, "O ANAGRAMA E "AS 90 M - INT ( RND (1) * (N - 1)
140 PRINT 6129. "QUE PALAVRA VOC ) + 1 Quando rodar esse jogo, você verá
E ACHA QUE E?" 100 A$ - AS MIDS (WS,M,1)
+ que a palavra digitada em primeiro lu-
160 INPUT GUESSS 105 IF M - THEN WS - MIDS
1 í gar não aparecerá na teia. Esse oculta-
170 G-G+l WS.M + 1) : GOTO 120 mento tem por objetivo evitar que o seu
180 IF GUESSSOWORDS THEN PRINT 110 WS - LEFTS {WS.M - II + M adversário veja qual é a palavra. Cada
" ERRADO, TENTE OUTRA VEZ" GOTO : IDS (WS,M + 1) computador utiliza um método diferente
160 120 NEXT para fazer isso. Os micros
da linha Spec-
190 PRINT PRINT" MUITO BEM !" 130 HTAB 4: VTAB 12: PRINT "O
:
trum imprimem a palavra na mesma cor
200 IF O-l THEN PRINT" VOCE USO ANAGRAMA E: ";AS
HTAB 1: PRINT "QUE do plano de fundo, de modo a torná-ia
U 1 TENTATIVA" ELSE PRINT"VOCE 140 PRINT :

invisível.
USOU" G "TENTATIVAS"
;
PALAVRA E ESTA "
;

210 PRINT 6480. "QUER JOGAR DE N 160 INPUT GUESSS OTRS-Color entra a palavra utili-
OVO (S/N)?" 170 G - G + 1 zando INKEVS. que apanha um carac-
220 AS=INK£YS:IF AS<>"S" AND AS 180 IF GUESSS < > WOS THEN P tere por vez no teclado, sem imprimi-los
<>"N" THEN 220 RINT PRINT "ERRADO! TENTE NOV
: na tela. O MSX e o Apple II simples-
230 IF AS="S" THEN RUN AM ENTE " GOTO 160
.

:
mente apagam a tela depois da digita-
240 END 190 PRINT PRINT "MUITO BEM!" :
ção da palavra.
A rotina para embaralhar as letras es-
tá nas linhas 80 a 120.O que acontece
éque os caracteres são apanhados alea-
10 CLS : LET aS-""; LET g-0
ANAGRAMA" 205 PRINT "VOCE TENTOU ";G;" V toriamente na palavra e acrescentados
20 PRINT '
"
30 PRINT "DIGITE A PALAVRA
'
'
EZES " .

A SER EMBARALHADA" 210 PRINT PRINT PRINT "VOC : :

40 POKE 23609,20: POKE 23658. E JOGA OUTRA VEZ? "


"
8: POKE 23624.63 220 GET AS: IF AS < >
50 INPUT wS AS < > "N" THEN 220
55 LET sS-wS 230 IF AS - "S" THEN RI
60 POKE 23624,56 240 END
70 CLS
80 FOR n-LEN WS TO 1 STEP -1
90 LET m-INT (RND*n)+l
100 LET aS-aS+wS(m)
10 CLS R-RND (-TIME)
110 LET wS-wS{ TO m-l)+uS(a+l :

20 LOCATE 5,2:PRINT"
TO )

120 NEXT n PROGRAMA DE AN AG RAMAS


130 PRINT '"O ANAGRAMA E " aS ;
30 LOCATE 1,5: PRINT"
140 PRINT "QUE PALAVRA VOCE A
' Digite uma palavra para
"
CHA QUE E?" ser misturada :

160 INPUT LINE gS 50 INPUT WS


170 LET g-g+1 55 WOS-WS
180 IF gSOsS THEN PRINT " ERR 70 CLS
ADO TENTE OUTRA VEZ" GOTO 160
, : 80 FOR N-LEN(W$)T01 STEP'

llRiSlTl I I
A] Tl Tl Yl Pl 1 1 Sl Tl IAG|E|N|C|Y|Z[
IIIIIIIIHH lllllllll
(um de cada vez) a AS que, gradualmen- para números, que podem ser manipu- consiste em fazer programas "à prova
te, monta o anagrama. lados por meio de operações aritméticas de idiotas", ou seja, que impeçam a di-
A linha 90 escolhe um número alea- tais como divisão, soma, subi ração. ctc. gitação equivocada dos dados. Por
tório M, entre e a extensão da pala-
I exemplo, na seção abaixo:
vra. A linha 100 pega a M-ésima letra
0 TAMANHO DE UM C0RDA0
e a acrescenta a AS. A linha 1 10 remo-
ve esse caractere da expressão original,
tomando a parte esquerda da palavra até Às vezes é útil conhecer o compri- ...o computador espera que o usuário
a posição M
(exclusive) e acrescentan- mento de um cordão. Se, por exemplo, digiteum número. Se este digitar um ca-
do o que vier após M. Agora, a expres- você tiver um espaço limitado de memó- ractere não numérico, a maioria dos
são terá um caractere a menos, mas da ria, reservado para a informação digi- computadores imprimirá uma mensa-
próxima vez, ao fechar o laço, a variá- tada no teclado, ou se dispuser de uma gem de erro. Esta, porém, avisará ape-
vel N também lerá seu valor reduzido de área restrita na tela para exibi-la, pode nas que alguma coisa eslá errada, sem di-
um; assim, o número aleatório M
será ser conveniente verificar a extensão da zer onde está o erro.
novamente limitado pela extensão da entrada antes de continuar com o Porém, se for utilizado:
palavra. programa. 110 INPUT AS
Quando todos os caracteres tiverem O comando LEN(AS) fornece o nú-
sido extraídos, o anagrama será impres- mero de caracteres de um cordão AS. E ...o computador aceitará qualquer coi-
so na tela e o seu adversário terá que adi- uma função numérica e pode ser mani- sa digitada pelo usuário sem emitir men-
vinhar qual a palavra original. Quando pulada de acordo com as leis da álgebra. sagens de erro. O passo seguinte será
ele acertar, o computador informará so- Por exemplo, se AS = "SR JOÃO SIL- converter o cordão em um número. Pa-
bre o número de tentativas feitas duran- VA", LEN (AS) = 13. Mas, se o progra- ra isso, utiliza-se a função VAU \. Na

te o, jogoe oferecerá uma nova partida. ma exigir que o usuário entre um nome, maioria dos computadores, se houver al-
É bastante fácil alterar esse progra- e só houver espaço suficiente na tela pa- guma letra misturada com números no
ma, de modo a fazer com que as pala- ra exibir onze letras, o trecho seguinte cordão de entrada, VAL retornará um
vras sejam lidas a partir de uma lisla de poderá ser utilizado para informar ao valor igual a 0.
dados em linhas DATA, em vez de usuário que ele deve limitar a extensão Infelizmente, esse método não serve
entrá-las separadamente a todo momen- do nome a ser. entrado, eliminando le- para os micros da linha Sinclair, nos
to. Você pode igualmente elaborar um tras ou mesmo palavras: quais o emprego do comando VAL com
um cordão de caracteres que contenha
sistema de contagem de pontos, atri-
buindo, por exemplo, dez pontos para
uma adivinhação correia feita na pri-
HHMIM1 letras produz uma mensagem
Nesses micros, a função VAL
de erro.
só deve
meira tentativa, nove para uma adivi- 10 PRINT "DIGITE 0 NOME DO ser usada se o cordão for constituído
nhação correta após duas tentativas e as- ASSUNTO" apenas de números. Assim,
20 INPUT AS VAL("1984") fornecerá 1984; mas
sim por diante.
30 IF LENfAS)>ll THEN PRINT
Uma outra utilização desse método "APENAS 11 CARACTERES
VAL( "26/ 10/84") fornecerá 0.03095...,
de fracionamento é a manipulação de DISPONÍVEIS" GOTO 10 porque os micros da linha Sinclair utili-
datas. Estas formam um cordão, mes-
; :

zam o VAL
para avaliar a expressão 26
mo quando são digitadas em forma nu- O usuário deverá então reduzir sua : 10 84. Por esse motivo, os possuido-
:

mérica — como, por exemplo, entrada e teclar 'JOÃO SILVA". res do Sinclair não precisam ler o resto
27/03/51, que significa 27 de março de desta seção, dirigindo-se diretamente pa-
195 1 É bem verdade que você não po-
. Emoutros casos, pode ser mais fácil ra o próximo "capítulo" do artigo (De
de manipular uma data expressa desse truncar automaticamente uma entrada. números a cordões).
modo pelas leis normais da matemáti- Isso é feito com uma linha tal como a Nos computadores TRS-80, TRS-
ca. Mas pode trabalhar com diferentes que se segue;
partes de uma data utilizando arit-
mética.
Dessa maneira, é possível, por exem-
plo, calcular quantos anos uma pessoa
tem em um
determinado dia, desde que
se conheça a data de seu nascimento. Da
mesma forma, pode-se calcular quantos
dias se passaram entre duas datas deter-
minadas.
Os comandos LEFTS, RIGHTS e
MIDS —
ou os métodos equivalentes
usados pelos micros da linha Sinclair —
podem ser usados facilmente para sepa-
rar o día, o mês e o ano de uma data. Umadas aplicações
Caso seja empregada a função VAL (ex- mais importantes das
plicada mais adiante), os cordões con- funções de conversão de
tendo números poderão ser convertidos cordões para números

1AMTIYIP1HS1TI |A|G1E|N|C|Y1Z| [
S
|

IIIIIIIIIHHH lllllllll
Color, Apple e MSX, a função VAL ex- com a aritmética de números binários, finidos por AS. N deve ser um número
trai a parte numérica cio cordão. Assim, a linguagem BASIC é capaz de manipu- ou uma variável numérica, enquanto AS
se AS contiver apenas dígitos numéricos, lar apenas decimais ou, em alguns ca- deve ser uma variável alfanumérica, um
VAL( = A$) retornará o valor numéri- sos, hexadecimais e octais. Assim, quan- caractere ou um cordão de caracteres en-
co correspondente, que poderá ser pos- do um número binário aparecer em um tre aspas. Por exemplo, PRINT
**«•**.
teriormente utilizado no programa. Se, programa em BASIC, ele precisa ser tra- STRINGS (6, "*") imprimirá
ao contrário, A$ não contiver números, tado como se fosse um cordão: Nos microcomputadores das linhas
VAL(AS) retornará o vaíor 0. TRS-80 e TRS-Color a função STRINGS
Você poderá então escrever uma pe- utiliza somente o primeiro caractere do
quena sub-rotina que explique em deta- cordão especificado, ignorando o resto.

lhes ao usuário que ele cometeu um er- 10 PRINT"DECIMAL PARA BINÁRIO" Por exemplo, STR1NG$(3,"XBC") impri-
ro, oferecendo- lhe ao mesmo tempo ou-
20 PaiNT"DIGTTE NUMERO DECIMA me XXX, apenas.
L INTEIRO" Eis aqui dois programas (um para os
tra oportunidade de entrar os dados sem
30 INPUT D
interromper o programa ou desarrumar modelos compatíveis com a linha TRS-
40 LET BS=""
a tela do computador. 50 LET BS=STRS(D-INT(D/2)*2)+BS
Color e o outro para os da linha MSX)
Umponto importante a ser observa- 60 LET D=INT [D/2) que utilizam STRINGS para imprimir
do em relação ao comando VAL é que 70 IF DOO THEN GOTO 50 uma borda decorativa na tela. Você po-
ele só extrai números no início do cor- 80 PRINT"0 NUMERO BINÁRIO E" BS ;
de utilizá-los para abrilhantar a página-
dão. Dessa maneira, VAL("25 Julho") título de um jogo:
é igual a 25. mas VAU "JULHO 25") Quando for entrado um número de-
è equivalente a 0. cimal positivo, a linha 40 igualará BS a
A função VAL é útil também para um cordão vazio ou nulo; este será en-
10 CLS0
ordenar números extraídos de um cor- tão progressivamente preenchido com
20 AS=CHRS(158)+STRINGS!J0.CHRS
dão. Se, por qualquer razão, você tiver dígitos obtidos pelo processamento nas
(156) )+CHRS (157)
os nomes e as notas de uma classe de linhas 50 a 80.
30 B$ = CHRSU54)+CHR5I174)+STRIN
alunos em um cordão como AS = "'32 Na verdade, a linha 50 é a que mon- GS ( 2B CHRS ( 172)
, ) +CHRS ( 1 7 3) +CHRS
CARLOS", B$"45 MARCOS" e ta o número binário. Ela subtrai duas (149)
CS = "41 JOSÉ" e assim por diante, e vezes o valor inteiro da metade do va- 40 CS=CHRS(154)+CHRS(171)+STRIN
quiser uma média dos resultados, o pri- lor decimal, a partir do próprio núme- GS (28, CHRS (163) +CHRS 167) +CHR5
)
!

meiro passo a ser dado será extrair as ro decimal. Essa é uma maneira de tes- (149)
notas individuais utilizando o VAL. As- tar se o número é ímpar ou par. Se for 50 DS-CHRSU55)+STRINGS(30,CHP.5
sim, VAL( = AS) fornece 32, VAL( = B$) impar, o resultado da operação será 1; U47]) +CHRS (151)
extrai 45 e VAL (C$) separa 41. se for par, o resultado será 0. Estes são, 60 FS-CHBS(154)+CHRS(170)*STR1N
M
Do mesmo modo, o comando VAL como você já sabe, os dois dígitos bi- GS(28, "l+CHRSUeSJ+CHRSÍMS)
70 PRINT AS;
pode ser utilizado para ignorar as uni- nários.
80 PRINT BS
dades de medida digitadas junto com os Esses dígitos são convertidos em um 90 FOR K-l TO 11
valores. O próximo programa mostra- cordão mediante o emprego da função 100 PRINT FS;
rá a você a diferença: STRS: em seguida, são montados
eles 110 NEXT K
por intermédio da concatenação de ca- 120 PRINT CSi
da novo dígito com o resto do cordão. 130 PRINT DS;
140 PRINT §23 7, "OLA !":
100 LET ÀS-"32KG-
110 LET BS="110KG"
120 PRINT"AS+BS- ":AS+BS
DOM 150 GOTO 150

130 PRINT"VAL<AS)+VAL(BS)-";VAL
<AS)+VAL(BS)
140 END
Os computadores
DE NÚMEROS A CORDOES TRS-80 e TRS-Colo
contam com duas fun-
A
função STRS desempenha um pa- ções adicionais de ma
peloposto ao do comando VAL: en- nipulação de cordões
quanto este extrai números de cordões, alfanuméricos:
aquela converte números em cordões. A STRINGS e
vantagem dessa operação é que os cor- INSTR (estas
dões podem ser, por exemplo, fraciona- não existem nos
dos e concatenados. micros da linha
O
comando STRS possui, portanto, Apple, TK-2000
inúmeras aplicações. e Sinclair). O
O programa a seguir transforma um STRLNG$(N,AS)
número decimal em binário. Embora os produz um cordão
computadores trabalhem diretamente de N caracteres de-

|L|E|T|Y|P|I[S|T| |A|G|E|N|C|Y|Z1
IIIIIIHHH lllllll
cada por P. Essa forma de utilização é ocorrências de uma palavra). O INSTR
muito útil quando se deseja procurar é usado para localizar essas ocorrências.
ocorrências repetidas do mesmo sub- Se a nova palavra tiver um comprimen-
10 CLS:COLOR 6,11 to diferente daquela a ser substituída,
20 A$-CHRS<219)+STRINGS(36,210) cordão no cordão principal.
Suponhamos que se deseja encontrar será necessário movimentar o resto do
+CHBS (219)
30 BS-CHRS(209)+CHHS(32)+STRING todas as ocorrências da letra na pala-
I texto para criar espaço,
S(34,192)+CHRS(32)+CHRS(209> vra INCONSTITUCIONAL. O primei-
40 CS-CHHS(209)+CHBS(32)+STRING
S 34 195) +CHRS 32 +CHRS (209)
( , (

50 DS-CHRS(209)+CHRS(222)+STRIN
)
ro I está na posição 1. Para achar o se-
gundo, entretanto, devemos usar o pa-
râmetro P, de modo a começar a busca
D
10 LINEINPUT "DIGITE TEXTO: " ;T
GS (34,32) +CHRS( 221) +CHRS (209) a partir de P = 1 + 1 (ou seja, P igual a S
70 PRINTAS portanto,1NSTH(P,"INC0NST1- 20 LINEINPUT " PALAVRA A SER TRO
2);
BO PRINTBS TUCIONAL","!*'). Para localizar a CADA? ";WS
90 FORK-1T018 30 LINEINPUT "NOVA PALAVRA? ";N
terceira ocorrência do I, o número P de-
100 PRINTDS US
110 NEXT ve ser incrementado mais uma vez, e as-
um 40 P-l
120 PRINTCS sim por diante, até que resultado 0
50 PO-INSTR (P TS.MS) ,

130 PRINTAS seja retornado pela função.


60 IF PO-0 THEN GOTO 100
140 LOCATE 16,10:PRINT"OLA"; Esse comando serve ainda para veri- 70 TS-LEFTS (TS PO-1) +NWS+RIGHTS
.

150 GOTO 150 ficar uma entrada feita pelo teclado. Se (TS LEN (TS) -PO-LEN (US)+1)
,

for preciso escolher uma opção em um 80 P=PO+LEN(NWS)


Os programas para o TRS-Color em- menu, digitando a sua letra inicial, as al- 90 GOTO 50
pregam diversos caracteres para impri- ternativas poderão ser: 100 PRINT TS
mir as bordas. Os
blocos são impressos 110 GOTO 20
— PRINT "(I)MPRIMIR 0 TEXTO"
com esquema de duas cores amare-
lo/preto e azul/preto. Para se fazer uma
borda simétrica, as cores são invertidas,
de cima para baixo, e da esquerda para
10
20
30
PRINT
PRINT
TEXTO"
"(G)RAVAR 0 TEXTO"
" (C) ARREGAR NOVO

" (E DITAR O TEXTO"


um
10 INPUT "DIGITE UMA FRASE ";T
40 PRINT )

a direita. Cinco cordões são utilizados: 50 PRINT "ESCOLHA UMA OPÇKO" $


AS e BS definem a parte superior da 15 T$ - CHRS (32) + TS + CHRS
60 INPUT AS
[32)
borda, FS os lados, e CS e DS a mar-
gem inferior. A linha 150 impede que o
O
modo mais fácil de se verificar a 20 INPUT "PALAVRA A SER SUBSTI
validade de uma letra digitada pelo TU IDA ";WS
sinal de prontidão OK perturbe o resul- INPUT "NOVA PALAVRA ";NWS
usuário consiste em acrescentar a linha 30
tado fina! na tela. O programa para o 35 P - 0
a seguir:
MSX também utiliza caracteres gráficos 40 P - P + 1
para fazer as bordas. 50 AS MIDS (TS.P. LEN (WS))
m
60 IF AS < > WS THEN 90
70 TS - LEFTS (TS.P - 1) + NWS
COMO PESQUISAR UM CORDÃO Isso elimina possíveis mensagens de + RIGHTS (TS. LEN (TS) - V -
erro, que "estragariam" a tela. LEN (WS) + 1)
O comando INSTR examina o cor- 80 P - P + LEN (NWS) - 1
dão, procurando pela primeira ocorrên- 90 IF P < LEN (TS) THEN 40
PROCESSAMENTO DE PALAVRAS 100 PRINT TS
cia de um sub-cordão mais curto. As-
110 GOTO 20
sim, uma das aplicações mais comuns
para o INSTR consiste em encontrar As funções alfanuméricas do BASIC
uma palavra dentro de uma sentença, ou têm um grande número de aplica-
uma letra dentro de uma palavra. ções, especialmente no qi
Para usá-lo, especifica-se INSTR(AS, refere ao processamentc
BS): isto significa que a função deve in- de palavras. Um
aspec-
dicar a posição inicial do sub-cordão BS to comum a progra-
no cordão AS. Por exemplo, PRINT mas desse tipo é a
INSTRCALO", "L") exibirá o núme- possibilidade de
ro Se o computador não conseguir
2. substituir uma
achar o cordão, ele retornará 0: determinada
palavra por
10 AS="ALO" outra (isso
20 BS="W" pode ser ne-
30 PRINT INSTR(AS.BS)
cessário, por
Em
alguns micros é possível ainda es- exemplo,
pecificarum número que define a posi- quando apa-
ção no cordão maior, a partir da qual a recer um erro
função INSTR funcionará. Assim, em de ortografia
INSTR(P.AS,BS), essa posição é indi- em todas as

|E]T|Y|P| USlTj |A|G|E|N|C|Y[Z| |B[R


10 LINEINPUT"Di gi te
";T$
20 LINEINPUT"Pal.
titulda? ";WS
30 LINEINPUT"Nova pala'
S
40 P-l
50 PO-INSTR(P,TS.WS)
60 IFPO-0THEN100
70 TS-LEFTS ITS. PO-1 +NWS+RIGHTS
)

(TS.LEN(TS)-P0-LEN(WS)>1)
80 P-PO+LEN(NWS)
90 GOTO50
100 PHINTTS
110 GOTOZO

Comece entrando sentenças bem sim-


ples e lente o procedimento de substitui-
ção de algumas letras ou palavras.
Quando esias forem curtas como "ou",
"na",etc, será necessário digitá-las com
um espaço antes e outro depois; caso
contrário, toda ocorrência de "ou",
"na", etc, dentro de outras palavras,
(por exemplo, "ouro" e "banana")
também será modificada.
O programa funciona assim: a linha
40 define o P para começar o processo
de pesquisa no início do texto. As linhas
50 e 60 encontram a primeira ocorrên-
cia da palavra ou da letra que se
substituir; em seguida, a linha 70 a subs-
titui por uma nova palavra. Essa linha
investiga o texto do início até a palavra
a ser modificada, acrescenta a nova ex-
pressão e concatena o restante do tex-
to. O processo se repete até que todas
as ocorrências da palavra tenham sido
substituídas. A linha 100 imprime o re-
sultado (os programas profissionais de
processamento de palavras são, eviden-
temente, mais complexos do qi
exemplo).
" , j ) 8 j0 1,",".",'
0
" : 5

Illllllll MIM!
Um programa que calcula a dimensão dos
EMBIEIR PARi saltos e faz a tradução dos

códigos mnemónicos Assembly para o

PECTRUM sistema hexadecimal: o que


mais poderíamos desejar na vida?

Montar um programa em linguagem R i-l to 8/j: head a$(i,j): nex


de máquina calculando os códigos a Ti: NEXT j: FOR j-1 To 18: rea
mão pode ser bastante cansativo, mes- D t(J),u9(j)t NEXT^j^
mo que se saiba de cor os códigos mne- 6 b e
?? S ihíT* I ^'"í"-""fí'" -hí'""""
mõnicos e seus equivalentes hexadeci- „',íc ..'. a '.
. r pi' j j - . P 235 de aQ a£
. 227 l,(ap),1 6
* , , , . , ,
mais e se esteja tamilianzado com todos
0742 "0" .60758. "l", 60 766, "2" .23,

os modos de endereçamento. Com efei- 3 " (hl " 56809, " (ix) " ,65001 " (1
, )
,
,

to, além de estar sujeito a erro, o traba- yj " 10 " <bc) " 26 " (de) " ,60767
,
,
.
. ,

lho de tradução e de transferência do r",2,"(bc)",18," (de) ', 60751, "r"


programa para o computador é sempre 249, "sp" .60743 "l" 60759, " i"
, , ,

tedioso. A
solução está em entregar es- 5070 def fn b(x,i)-iNT (x/b(i+l
" INT (x/b( i+2) *2
se trabalho ao próprio computador. í ' )

Nesta lição apresentamos um progra- 5080 def fn x (x, 1) -x-b (i+2) *FN
ma Assembler para os micros compatí- > +b
í íí~*'

veis com o Sinclair Spectrum (por exem-


5090 DEP x-bd + 1) W ,

pio, oTK-WX)comumm]'nimode48K 5100 DEF FN e i S J$ - (iS- jS ( TO ( ,


)

de memória. Versões para outros com- L en (is) 1

putadores serão abordadas nas próxi- 5110 for 1-1 to 110: READ kS(i)
mas lições desta série. TK-2000 não O ,k(l) ,m(i> if NOT fn e ("*" ,kS : t

necessita de um programa desses, pois 1) then next 1 )

já vemeom um míni-Assembler. Opro- 5120 DATA " ld" 10 10 "ld" 26. 10 , .


,
,

grama apresentado aqui não funciona ,"ld",60767,10, "ld",60759,10."l -

no Spectrum de 16K, nem nos modelos d" 2-138, "ld". 18. 136, "ld", 60751
.
d d
pnmnalívpk
compatíveis n mm
7Y SI Flp
com
o ZX-81. Ele p t lá pí
esta es-
.
,
1 38 " 1 " 60 74 3 1 38 " 1 " 64 6 , ,
,
, .
,

ento em BASIC, o que o torna bem 139 - ld" 34, 195 "ld" 42 ,67 "ld"
,
.
, ,
,

mais lento que os Assemblers conven- ,60779, 197. "ld" 60771 199, -ld- . .

cionais, elaborados em código de má- 97 165 " ld" 64, 54


,
,
,

quina. O importante, porém, é que ele 5130 DATA "adc" 136,50 "adc" 60 ,
,
,

não só funciona, como é capaz de mon- 746, 3 "add" 128 ,50, "add", 9,149. , ,

tar programas Assembly, publicados "and" 160 ,48, "or" 176,48, "xor" , ,

por nós ou obtidos de outras fontes. Um 168.48, -nop" o o "aub" 144. 48, ,
, , ,

programa longo levará um bom tempo sbe" 152,50, "abe" 60738, 3,'cp'., ,

para ser montado. 184 ,4B, " P " 130 .45 " P " 233 ,9. ,
,
.

jp-.56809,9."jp",65001,9,"jp",l
_ 31,49, " jr", 96,45, " jr" .88,41
5140 DATA "call-,132,45."call".
141,41,-ref,201,0,"djnz",74,40
,"dec".11.17."dec",5.16,"inc",3
,17,"lnc",4,16,-push".197,17,"p
op",193,17,"di",243,0,"ei",251.
t
5000 DIM kS(110,4): DIM k(110): 0 "hal " 118 0 "ex" 235 1 39 "ex
.
. .
.
. ,
,

DIM m(110): LET hS-" 01 23456789 " 8 15 , "ex" , 22 7 143 "exx" 217
, . ,
,
, ,

ABCDEF" LET bS-"": LET gS-"012


: 5150 DATA "rat" 199 132 "rta" , ,
,
, 984, 64, "ria", 23, 0,-rlc", 51968,1
3456789abcdef " 92 5 . "bit" 52032 20 "def b" -256
, , .
, .
6,"rica", 7.0, "rld". 60783, 0, "rr"
S010 DIM t$(110,24) DIM r (100) : ,40 "cef" 63 0 "acf " 55 0 "cpl
,

, ,
.
, ,
.
,51992, 64, "rra", 31, 0,"rrc", 5197
: DIM z$(100,6): DIM z(100) .47 0 "cpd" 60841 0 "cpdr" 6085
.
.
. .
.
. 6,16,"rrca",15,0.-rrd-,60775.0
5020 DIM b(9): LET b(l)-l: FOR 7 0 "epi ", 60833 0 "epi r" 60849 5180 DATA "set". 52160, 20, "ala".
,
, , . ,

i-2 TO 9: LET b i -b i -1) +b i-l(


)
< ( 0 "daa" 39 0 " im" 60742 8 " ím"
,
. ,
.
. ,
,
52000. 16. "ara", 52006, 16, "arl",
): NEXT 1 60758, B."im", 60766, 2024,16, "defw" ,-256,41
5030 DIM rS(8.4.4): FOR- j-1 TO 5160 DATA " In" . 60736 1 30 , " in" , , 5190 DATA """,0,0: LET ii-i: LE
4: FOR 1-1 TO 8: READ r$(i,j): 49 42 ," ind" 60848 0 ," indr" 6081
, , , , T M110)-ii
NEXT 1: NEXT j 0 0 ," ini ", 60840 0
, ldd" 60840 , , , 5200 LET b-0: LET ba-PEEK 23635
5040 DATA " 0" " 1" 2" " 3" "4" "
, , , ,
lddr" 60856 0 ," Idi ", 60832 0 , , .
,
+256*PEEK 23636+4: LET n-1
5","6","7","nz","z"."nc","c","p ldir" 60848, 0 "neg" 60 740, 0 "ot ,
,
,
,
5210 LET cc-1: IF PEEK ba<>234
o-."pe","c"."n","0","8"."16","2 dr ", 60859 0 "ot ir" 60851 0 "out ,
.
, ,
,
THEN LET n-n-1 GOTO 5250
:

4" ,"32", "40" .


"48", "56" "hl", "IX ,
" 60737 , 2 . "out ' 141 1 70 "outd"
. , ,
.
5220 LET cc-cc+1: LET ba-ba+1
"."iy","bc","de","hl"."sp*," " 60843 0 "out i " ,60835 .
,
, IF PEEK ba-13 THEN LET ba-ba+5
5050 DIM aS(8.2,4): DIM t<18): 5170 DATA "rea" , 52096 . 20 "reti ,
: LET n-n+1: GOTO 5210
I DIM USU8.10): FOR j-1 TO 2: FO ,60749, 0 "retn" 60741 0 . "ri ". 51 , , , 5230 LET tS(n,cc)-CHRS PEEK ba
: " (

llllllllllllHHH^HI^HMHailllllllllill
tradução de assembly para RESERVE ESPAÇO PARA DADOS
código de máquina E VARIÁVEIS
como calcular saltos COMO COLOCAR OS CÓDIGOS
E DESVIOS NA MEMÓRIA USANDO POKE
0 USO DE RÓTULOS TESTE 0 PROGRAMA

5240 GOTO 5220 (1)--*- THEN LET a-p LET lS-l


: KE r.FN j(p*a+q,8): PRINT " POK
5250 FOR g-1 TO 100: LET r(g)-g S(2 TO ) E ";r:" com " FN j(P*s+q,8); IF
:

'"
-1: NEXT g: LET fh-100 5390 LET p-VAL iS+3: PRINT b THEN POKE (r+l).FN 3 ( {p«3+q
5300 LET kO-0: LET k9-99: LET p org " ;p;: GOTO 5320 )/256,B): PRINT " POKE ":r+l;"
0-0: LET W-0 5400 IF p-0 THEN PRINT "(falta com "sfN M(p*g+<J)/256,8)
5310 LET k-kO: LET p-pO org) ": LET p-50000 5460 IF gg<-100 THEN LET gh-r
5320 GOSUB 6000 5410 LET PS-OS+"!": FOR 1-1+16" gg): LET r(gg)-fh: LET fh-gg: L
S330 GOSUB 7000: LET oS"ÍS: IF (oSO-ld") TO 110: IF oS<-kSU) ET gg-gh: GOTO 5450
oS(l>-"*" THEN PRINT 0$;: GOTO AND pS>kS(l) THEN GOTO 5500 5470 IF iS-"" THEN LET r(g)-p+
5320 5420 NEXT 1 PRINT oS 100: GOTO 5330
5340 IF o$-"end" THEN PRINT '
:

5430 IF iSd)-"." THEN LET i$- 5480 PRINT " (Linha nao foi rec
endereco final ";p-l tS(2 TO ) onhecida)
5350 IF o$-"end" THEN LET pO-p 5440 GOSUB 9000: LET gg-r(g) 5490 GOTO 5420
: GOTO 9999 5450 IF ggOlOO THEN LET s-SGN 5500 LET Z-0: LET r-0: LET e-0:
5370 IF oS<>"org" THEN GOTO 54 z(gg): LET b-INT <ABS z(gg)/65 PRINT " "iOS;
00 536): LET r-ABS z (gg) -b*65536 5510 LET op-k(i): IF B(l)-0 THE |

5380 GOSUB 7000: LET 3-0: IF i$ LET g-PEEK r+256*PEEK (r+1) :PO N GOTO 6090
:: ::

IIIIIIIIIIIIHHI lllllllll III

5520 GOSUB 7000: LET aS-iS: PRI


NT " ":*9i
5530 LET m-m(l) LET op-k(i): L :

ET b-FN btm.O): LET b?-b+2*FN b


(m.7)+l: LET z-0 IF FN j<m,3)< :

2 THEN LET cS-aS GOTO 5720 :

5540 FOR J-l TO LEN aS IF aS(J :

)-"." THEN GOTO 5580


5550 NEXT j IF oS-"rat" OR o$-
:

rts" THEN GOTO 5580


5560 IF FN e(o$.k$(l+U) THEN
LET i-i+l GOTO 5530
:

5570 PRI NT " (deve haver doia o


perandoa) " GOTO 5320:

5580 LET bS-aS( TO j-1) LET CS :

-aS(j+l TO )

5590 IF FN b(m.2) THEN GOTO 56


50
5600 IF FN b(m,7) THEN LET dS-
cS: LET cS-bS: LET bS-dS
5610 IF b$-*ahl"(b+l TO b+b+1)
THEN GOTO 5720
5620 IF bS-*ÍO" AND (oS-"ín" O
B oS""0Ut") THEN GOTO 5720
5630 IF (FN e(oS,kS(i+l) AND ) )

(FN j (m(i+l> 3J>-2) THEN LET i


.

-1+1: GOTO 5530


5640 PRINT "(primeiro operando
deve aer a ou hl)": GOTO S320
5650 IF FN b(m,l) THEN GOTO 56
90
5660 LET eS-(bS+" ") ( TO 4)
FOR j-1 TO 8: IF e$-r$<J.b7) TH
EN LET 0P-op+8*{j-l)*[b7<4]+16
*(j-6)*(b7-4)*(j>3) LET z-<j-l :

)*(b7-4)*(j<-3) GOTO 5710 :

5670 NEXT j: IF pS>k8(l+l) AND


(FN j(m(i+l) ,3)>-2) THEN LET i
-1+1: GOTO 5530
5680 PRINT "(primeiro operando
deve aer bit ou sinalizador)": :-j2-8 TO j2: IF kli)Ot(j) THE dS (2 TO GOTO 5940
) :

GOTO 5320 N GOTO 5810 5950 LET r-r+q*a: LET bS-dS: GO


5690 IF FN b(m,7) THEN LET d$- 5800 IF FN e(bS.uS{3)) THEN RE TO 5870
c3: LET CS-bS LET bS-dS GOTO : :
TURN 5960 IF x$<>"S" OR dS<"0" OR dS
5660 5810 NEXT j: IF bS-"af" THEN I >="g" THEN GOTO 6000
5700 LET x-8; GOSUB 5750: IF e F FN e("P",oS) THEN LET op-op+ 5970 LET xS-CHRS CODE dS: FOH g
THEN GOTO 5730 48: RE TURN -0 TO 15: IF XS<>hS(g+D AND xS
5710 IF c$-"" THEN GOTO 6090 5820 IF FN b(m,6l AND FN e("(". OgS(0+l) THEN GOTO 5990
5720 LET x-l+15*b+7*(op<-6 AND bS) THEN LET bS-bS (2 TO LEN bS 5980 LET q-q*16+g: LET dS"dS(2
op>-4 OR bS-"(c)"): LET bS-cS -1) : GOTO 5860 TO ) GOTO 5970
:

GOSUB 5750: IF NOT e THEN GOTO 5830 IF FN b(m.5) THEN LET op- 5990 NEXT g: LET r-r+q«3 LET b :

6090 FN x(op+6*N0T b,6): GOTO 5860 S-d$: GOTO 5870


5730 IF e-2 OR pS>kS(i+l) AND F 5640 IF pS>k$(i+l) THEN LET e- 6000 IF xS<"a" OR xS>"z" THEN
N j [md + lí 3)-FN j(FN X(m,0).3)
.
2: RETURN GOTO 6040
THEN LET e-0 LET 1-1+1: GOTO :
5850 PRINT "(operando incompati 6010 LET lS-bS: GOSUB 9000: IF
5530 vel)": LET e-1: RETURN 1$<>"" THEN GOSUB 9400
5740 GOTO 5320 5860 LET r-65536 6020 IF r(g)O23000 AND r(g)>10
5750 LET r-0: IF FN Mm, 4) AND 5870 LET s-1 0 THEN LET r-r+ (r (g) -100) *a L :

FN eí" ("( TO NOT b) ,bS) THEN L 5880 IF bS-"" THEN GOTO 6080 ET bS-iS: GOTO 5870
ET z 2-FN e("ix".b5(2-b TO )+" " 5890 LET xS-bS(l): LET dS-bS<2 6030 IF r(g)-23000 OR r (g)<-100
)+2*FN e("iy".bS(2-b TO )+" "): TO ) IF xS-"*" THEN
: LET r-r+P THEN LET gh-r (f h) LET r(fh)-
:

IF z2 THEN LET Z-z2 LET eS-b : *a: LET bS-dS: GOTO 5870 r(g): LET r{g)-fh: LET fh-gh: L
S( TO LEN bS-NOT b) LET b$-" (h : 5900 IF XS-"+" THEN LET bS-dS ET z (r (g) - (p+SGN 0P+(ABS op>25
)

l)"(l+b TO 4-b} LET f$-"0"+eS( : GOTO 5880 5)+2- (z>0)+65536* (b OR FN b(m,


(

4-b TO ) 5910 IF xS-"-' THEN LET bS-dS 61) AND oSO"jr"))*a: LET bS-lS
5760 IF FN b(oi.3) THEN GOTO 57 LET a--a: GO' ) 5880 : GOTO 5870
90 5920 IF xS-""" THEN LET r-r+CO 6040 IF xS<"0" OR X$>"9" THEN
5770 LET eS-(bS+" ")( TO 4): DE d$*s: LET bS-d$(2 TO ): GOTO LET r-0: GOTO 6070
FOR j-1 TO 8/(b+l): IF eS-s$!j. 5870 6050 IF bS>-"0" AND b$<":" THEN
b+1) THEN LET op-op+ ( j- 1 ) *X R : 5930 LET q-0: IF x$<>"t" OR dS< LET q-q*10+CODE bS"48: LET bS
ETURN "0" OR dS>"2" THEN GOTO 5960 -bS (2 TO ) GOTO 6050
:

j
5780 GOTO 5810 5940 IF dS>-"0" AND d$<"2" THEN 6060 LET r-r+a*q: GOTO 5870
5790 LET 32-9+9* IO$-"ld") : FOR LET q-q*2+CODE dS-48 LET d$-
: 6070 PRINT "(endereçamento inco
: ,

HIIIIIIIIIHH IIIIIIÍI
7020 LET k9-kl: IF tSlk.kl)-" "
THEN GOTO 7010
7030 IF k9>LEN tS(k) THEN LET
lS-tS(k)(kl TO ): RETURN
7040 IF tS<k.k9)<>" " THEN LET
k9-k9+l: GOTO 7030
7050 LET iS-tS(k)(kl TO k9-l)
RETURN
8000 IF k>0 THEN IF tS(k)(k9 T
O )>tS(99) THEN PRINT tS<k)(k9
TO ) :

8010 POKE 23692,0: LET k-k+1 L :


O que acontecerá se houver um erro
ET k9-0 em meu programa fonte?
8020 PRINT RETURN :
Nosso Assembler é capaz de emitir
9000 LET xS-"* mensagens de erro, pois a sua estru
9010 IF lS<"a" OR lS>"z" THEN tura de programação está preparada
GOTO 9030 para detectar falhas no programa i

9020 LET xS-xS+iS{l): LET ÍS-iS Assembly. Alguns comandos, por


(2 TO ) GOTO 9010
:
exempla, só trabalham com os regis-
9030 IF i$<>"" THEN RETURN trosaehl, Se tentarmos usá-los com
9400 FOR g-1 TO w: IF FN e(xS. outros registros, o Assembler dirá:
Z$ (g) THEN RETURN "
)
"Primeiro operando deve ser a ou hl
9410 NEXT g: LET vv-vv+1 LET z :
Se um comando não for reconheci-
$<vv)-x$: LET g-vv: LET r(g)-23 do devido a um erro de digitação, se-
000 remos automaticamente informados:
9420 RETURN "Linha não foi reconhecida" A expres-
são "Deve haver dois operandos" sig-
nifica que deixamos de digitar um nú-
COMO FUNCIONA 0 PROGRAMA mero vital após o comando, "Operan-
do incompatível" indica um uso inade-
quado do comando. "Primeiro operan-
Começando na linha 5000, o progra-
do deve ser bit ou sinalizador" signifi-
ma deixa espaço para seu programa em ca que um operando inadequado foi
Assembly, que deve ser colocado em li- usado em um comando de desvio ou de
nhas RI M Cada instrução deve ser es- atribuição de bits.
criia com leiras minúsculas e posiciona-
da em uma linha RKM separada. Existeuma maneira de se programar
Ames de montar o programa, deve- em Assembler nos ZX-81?
mos proteger uma área dc memória pa- Existe; mas o meio para isso não é
ra que o Assembler possa colocar os có-
um programa montador desenvolvido
rretol " em BASIC, como os que serão apresen-
6080 LEI r-r-(p+2)«(oS-"djnz" O digos, usando CLEAR. primeira li-A tados mais adiante para as linhas MSX
R o$-" jr") RETURN
:
nha de seu programa deve ser mais ou Apple II, TRS-80 e TRS-Color,

6090 PRINT TAB 16;: LET byp/25 menos assim: Montadores em BASIC para o
6: GOSUB 6190: LET by-p: GOSUB ZX-81 (com seus similares nacionais
10 REM org 55000
6190: GOSUB 6160 TK-85, CP-200, etc.) são inviáveis por-
6100 IF z THEN LET by=189+z*32 32000 é o endereço inicial do progra- que o programa resultante seria muito
: GOSUB 6180: GOSUB 6160 grande e de difícil digitação e operação:
6110 IF op>-0 THEN LET by-OP/2
ma em código. Obviamente, ele deve es-
na verdade, ele não caberia na memó-
S6: GOSUB 6170: GOSUB 6150: LET tar na área protegida da memória. ria da maioria dos micros dessa linha:
by«Op: GOSUB 6180 Se esquecermos de definir org, ou se- além disso, o processo de tradução e
6120 IF r-0 THEN GOTO 5320 ja, a origem, o Assembler colocará o pro- montagem desse programa seria extre-
6130 GOSUB 6160: LET by-r GOSU : grama a partir de 50000. mamente lento.
B 6180: IF (b OH FN b(m,6)) AND O programa aceita os códigos mne- Para comprovar isso, observe a lis-
oSO"jr" THEN LET by-r/256: G mônicos-padrào do chip Zilog Z-80, tagem para o ZX Spectrum que acom-
OSUB 6180 com exceção dos comandos de retorno panha este artigo: é a inexistência de
6140 GOTO 5320 condicional. Entretanto, o comando de declarações READ e DATA no ZX-81,
6150 IF z AND INT by AND NOT b o que dificulta a programação.
retorno incondicional de sub-rotinas,
THEN GOSUB 6260: LET by-VAL fS Seria possível programar um As-
cujo mnemónico é rei, funciona em nos-
: GOSUB 6180: LET z-0 sembler reduzido, sem rótulos alfabé-
6160 PRINT " " RETURN
; :
so Assembler. ticos, e com um conjunto menor de co-
6170 IF INT by<-0 THEN RETURN Algumas vezes, coniudo, utilizamos mandos. Mas isso o tornaria inútil pa
6180 LET by-FN j(by.8): POKE p. retornos condicionais, como ret nz, que ra quem quer aprender a programar se-
by: LET P-P+1 significa: "retorne se não for zero". riamente, e impossibilitaria 0 usuário de
6190 LET by-FN j(by,8): PRINT h Neste programa, porém, digite a instru- digitar e testar os programas em códi
S(1+INT (by/16) :hS(FN j(by.4)+
)
ção ris nz. A razão disso é que rts deve go Assembler que aparecerão em lições
1) ;
substituir rei sempre que forem neces- futuras. Por isso, quem quiser progra-
6200 RETURN Quando mar em Assembler no ZX-8' deve re-
sários retornos condicionais.
,

se
7000 IF k>n THEN LET iS-"end" correr a um programa tradutor compac-
tratar de retornoincondicional, ou seja,
RETURN to, eficiente e rápido, escrito em códi-
7010 LET kl-k9+l: IF k9>-LEN tS quando rei não for seguido de nenhu- e disponível comer-
go de máquina
(k) THEN LET l$-"/fal t ando/" : ma leira, use o mnemónico padrão rei.

RETURN Números hexadecimais devem ser


precedidos do caractere $; números bi-
nários, do caractere Qualquer núme-
ro que não seja precedido de algum ca-
ractere será interpretado como decimal
Qualquer palavra que não seja um co
mando Assembly será considerada ci

mo um rótulo (label). Evite usar pai;


vras parecidas ou muito longas; núme-
ros não são permitidos.
Para que o Assembler saiba onde pa-
rar, termine seu programa com REM
end.
Uma vez colocado o programa As-
sembly a ser montado (o programa fon-
te) nas linhas REM iniciais, basta rodar
o Assembler para se obter uma listagem
dos códigos equivalentes na tela: o pro-
grama objeio. O Assembler coloca o
programa objeto simultaneamente na
memória e na tela.
Se a esta altura For cometido algum
erro na digitação das linhas, será sufi-
ciente, para corrigi-lo, listar o Assem-
bler, editar a linha REM corresponden-
te e usar novamente RUN.
Montado o programa, o endereço fi-
nal da rotina em código de máquina
aparecerá na tela.
Para executar o programa em códi-
go usamos instruções do tipo RAN-
DOM USR.
Se quisermos gravar o programa ob-
jeto, devemos digitar:

SAVE "nome" CODE endereço


número de bytes.
inicial,

01 Fft ^
CD CEH
"Nome" é o nome do programa ob- Note que devemos usar letras minús-
jeto e deve estar entre aspas. CODE in- culas para digitar o programa fonte.
forma ao computador que está sendo Nosso Assembler não reconhece coman-
gravado um programa em código de má- dos em maiúsculas.
COMO DETECTAR ERROS EM quina e não em BASIC. O endereço ini-
PROGRAMAS LONGOS
cial é a origem do programa na memó-
Sempre que a mensagem "OUT OF
DATA" aparecer na tela, verifique se ria. Podemos calcular o número de bytes

está faltando alguma coisa nas linhas subtraindo a origem do endereço final Não apresentaremos um Assembler
DATA (lembra -se de que a ausência de e somando 1. para o ZX-81 pois é muito difícil escre-
,

uma simples vírgula pode deitar a per- O Assembler e o programa fonte po- ver um programa desse tipo em BASIC
der todo o programai. Um
dos erros dem sergravados juntos, como um pro- para esse micro. Se você tem um ZX-81
mais comuns na digitação de longos grama BASIC, usando-se SAVE da ma- e está interessado em código de máqui-
programas consiste justamente na neira habitual. na, sugerimos a compra de um Assem-
omissão de trechos de linhas DATA.
Por isso, caso seu Assembler não fun-
bler gravado em fita cassete e disponí-
cione ao ser rodado pela primeira vez,
vel em lojas especializadas.
não se desespere: ele certamente "em- Caso já disponha de algum, teste o
pacou" devido a erros de digitação. Para testar seu programa, entre o programa de deslocamento da tela para
Esses errros podem ser detectados programa de deslocamento horizontal a direita apresentado na página 217
por meio de um programa de rastrea- da tela para a direita, que se encontra que, uma vez traduzido para código de
mento. que escreve na tela o número na página 215. Uma vez traduzido para máquina, ficará assim:
da linha BASIC que está sendo execu- código, esse programa ficará assim:
lada. Um programa de rastreamento
completo será apresentado mais 11 FF 57 21 FE 57 06 CO C5 IA 2A OC 40 11 16 03 19 54 5D 13
01 1F 00 ED B8 12 2B 1B Cl 10 06 16 C5 IA 01 1F 00 ED 88 12
F3 C9 2B 1B 1B Cl 10 Fl C9
6 APLICAÇÕES 6

m PARA QUE APRENDER


DATILOGRAFIA?
AS TECLAS DE APOIO
MELHORE A VELOCIDADE EA
PRECISÃO NA DATILOGRAFIA

Sua utilização, no entanto, consome naria muito lenta, perdendo eficácia co-
Aspiração de todo programador que
muito tempo, especialmente quando o mo forma de treinamento.
se preza, a eficiência no operador não é um exímio datilógrafo.
processamento de textos e na digitação Essa perda de tempo é visível quando
um tentamos copiar uma listagem e somos
de programas tem pré-requisito
obrigados a olhar do teclado para a te-
fundamental: saber datilografia. la e desla para o papel, só para nos as- Do mesmo modo que qualquer cur-
segurarmos de que os dados estão sen- so padrão de datilografia, nosso progra-
do introduzidos corretamente. ma tem por objetivo desenvolver meto-
O futuro nos reserva, certamente, Assim, por que não utilizar o com- dicamente a destreza do iniciante. Esse
muitas surpresas no campo das relações putador no aprimoramento do modo de programa, no entanto, não é nenhum
entre o homem e a máquina. Uma de- datilografar? Fazendo isso, você econo- processo mágico e, como qualquer ou-
las pode ser a abertura de novos canais mizará tempo c evitará dores de cabe- tra coisa que se queira aprender, exige
de comunicação entre o computador e ça, quando quiser escrever programas dedicação.
o usuário — como, por exemplo, a voz ou explorar o potenciai de um compu- Para efeitos didáticos, ele foi dividi-
humana. Atualmente, alguns desses sis- tador como processador de textos. O do em etapas mais ou menos fáceis, com
temas de controle mais sofisticados já programa que se segue ajudará a se fa- seções extras de programação acrescen-
vêm sendo aplicados em máquinas in- miliarizar com o teclado e aumentar a tadas a cada uma das fases. Dessa ma-
dustriais e comerciais a um preço rela- velocidade e a precisão na datilografia. neira, é possível avançar através de mís-
tivamente baixo. A maioria dos usuá- O Sinclair Spectrum apresenta a des- seis cada vez mais difíceis. Outra virtu-

rios, porém, vai ter que esperar muito vantagem de ter um teclado de difícil de de nosso curso consiste em apresen-
tempo até ter acesso a essas inovações. manipulação e grande velocidade. Ain- tar, ao longo de seu desenvolvimento,

Enquanto isso, o velho teclado conti- trodução de programas, contudo, exige uma atualização constante da velocida-
nuará a ser o dispositivo básico de en- apenas um toque de tecla para cada co- de e da precisão atingidas pelo iniciante.
trada de um computador. mando em BASIC. Note que não esta- Se você é usuário de um Apple II, fi-
Na verdade, o teclado é um instru- mos apresentando uma versão do pro- cará sem o recurso de cronometragem,
mento de eficiência razoável para se grama para o Sinclair ZX-8 1 Isso se de-
. devido à falta de um "clock" acessível
transmitir instruções ao computador. ve ao fato de que sua execução se tor- nesse micro. Talvez a cronometragem
6 APLICAÇÕES 6

-ti

( *

<fo
At,

'os

manual o auxilie, nos níveis 4 e 5, a con- teclado, começando pelas letras A, S, D,


trolar seus progressos na datílografia. F... Portanto, estas serão as teclas que bre o S, assim por diante, terminando
devemos memorizar em primeiro lugar. com o dedo indicador sobre a tecla F.

CONHEÇA AS TECLAS DE APOIO


Uma vez dominada a localização des- O indicador direito, por sua vez, deve
sas teclas básicas, o restante do teclado estar na tecla J, o dedo médio na tecla
pode ser alcançado movendo-se cada de- K, e assim por diante. Os polegares tex-
Ser um exímio datilógrafo significa do para cima ou para baixo. ceto no caso do Spectrum) devem
ser capaz de pressionar as teclas corre- Para obter o máximo rendimento no posicionar-se sobre a barra de espace-
las sem precisar olhar para elas sempre curso será preciso ater-se a essa dispo- jamento. As letras G
e H, portanto, não
que se quer localizá-las. Evidentemen- sição, sem nunca tentar "enganar" o são cobertas por nenhum dedo. Quan-
te, isso só poderá ser feito quando se sa- computador. Por outro lado, os que in- do é necessário acioná-las, o C pode ser
be previamente onde se encontram as le- sistem em continuar "catando milho" alcançado com o dedo indicador esquer-
tras no teclado. É preciso, portanto, devem também procurar obter um gra- do, e o H com o indicador direito.
"educar" os dedos para que eles encon- dativo aprimoramento de sua destreza. Parece complicado, mas não se preo-
trem automaticamente as teclas deseja- Ao introduzirmos o programa —
ta- cupe: a primeira parte do programa se
das. O primeiro passo para isso consis- refa que deverá tornar-se cada vez mais destina justamente a familiarizá-lo com
te em posicionar os dedos sempre na fácil á medida que o curso prosseguir — as letras do teclado.
mesma posição sobre o teclado. Datiló- devemos ficar com as mãos pousadas
grafos profissionais fazem isso assegu- sobre o teclado, aguardando as instru- COMO FUNCIONA 0 PROGRAMA
rando-se de que os dedos das duas mãos ções que aparecerem na tela e que serão
repousem sempre sobre as mesmas te- explicadas a seguir.
clas, as denominadas teclas de apoio. O dedo mínimo da mão esquerda de- Ao programa, a tela
se executar o
Estas são as teclas da fileira do meio do ve repousar sobre a tecla A, o anular so- mostrará cinco opções, que correspon-
6 APLICAÇÕES 6

dem a níveis de dificuldade crescente. dor de cada mão), voltando-se às teclas NÍVEL 3
Você deve escolher uma entre elas. Se de apoio logo em seguida. Utilize o de-
você está começando a aprender, preci- do mínimo direito para as teclas e Ç. ; Este nível também apresenta letras
sa estudar primeiro a lição 1 para, só de- O asterisco continuará no mesmo lu- aleatoriamente, uma por vez. Agora,
pois de dominar seu conteúdo, passar gar, caso seja cometido algum engano. porém, a tela não indicará sua posição
para a lição 2, e assim por diante. Uma tecla batida corretamente será no teclado. Em vez disso, elas serão
anunciada por um bip. e por um som mostradas individualmente no centro da
grave se houver um erro ou se uma le- tela. Mais uma vez, as letras serão em
tra for omitida. (No Apple ocorrerá o número de vinte.
oposto.)
Ao fim de cada exercício, a tecla ninei -i

mostrará o tempo gasto e o número de


erros cometidos. Finalmente, pode-se datilografar al-
gumas palavras. As expressões deste

NÍVEL I

NIVEL 2
A tela apresentará as teclas de apoio exercício utilizam apenas as letras das te-
em uma linha, na mesma ordem em que Uma vez familiarizado com a posição clas de apoio: FADA, por exemplo. Ao
estão no teclado. Ao mesmo tempo, se- das letras no teclado, você pode passar contrário do nível anterior, serão apre-
rá mostrado um asterisco que, para este nível, que é semelhante ao pri- sentadas no centro da tela vinte palavras
deslocando-se acima das letras, percor- meiro, exceto que agora o asterisco se (e não letras) aleatoriamente e em suces-

rerá o teclado do A até o L no Spectrum deslocará aleatoriamente sobre as letras são, isto é, uma após a outra. À medi-
e no CP400, até o (ponto e vírgula) no
;
(não vale trapacear olhando a posição da que as palavras forem sendo copia-
Apple, até o Ç no MSX. Para se acio- da letra do teclado). Novamente, o tem- das, um asterisco indicará cada uma de
nar as teclas, deve-se tocá-las na sequên- po que se levar para completar o exer- suas letras. E, mais uma vez, será apre-
cia indicada pelo asterisco e com o de- cício (serão apresentadas vinte letras sentado o resultado do tempo gasto e da
do correto (lembre de que o G e o H exi- aleatoriamente) e o número de erros co- precisão. Não se deve trapacear olhan-
gem um deslocamento do dedo indica- metidos serão apresentados no final. do para o teclado; senão, não será pos-
ó APLICAÇÕES 6

sível compleiar os testes mais difíceis, atéque se torne fácil execuiá-los. Nos 240 GOSUB 1100
apresentados nas próximas lições. próximos capítulos acrescentaremos le- 250 IF C-0 THEN GOTO 240
tras e palavras novas. 260 PRINT AT 10, K;" "
NÍVEL 5
270 NEXT K
280 CLS :GOTO 1300
300 GOSUB 1000
Desta vez será escrita uma sentença 310 FOR K-l TO 20
com cerca de seis palavras aleatórias. Ã 10 BORDER 1: PAPER 1: INK 7: 320 LET RN-INT (RND"9)"2+1
medida que estas forem sendo digitadas, CLS 330 PRINT AT 10 RN+6 " *" LET
.
;
:

as letras aparecerão uma após a oulra. 20 POKE 23658,8: LET ER-0 RS-SS( (BN+1) /2)
30 LET SS" "ASDFGHJKL" 340 GOSUB 1100: IF C-0 THEN
Quando a linha toda tiver sido datilo- 100 PRINT INVERSE 1 ;AT 8,3;"
grafada, será mostrado o desempenho GOTO 340
PROFESSOR DE DATI LOGRAFIA " 350 PRINT AT 10. RN+6;" "
do datilógrafo, assim como um valor 110 PRINT TAB 6; "SELECIONE N
'
'
360 NEXT K
correspondente à velocidade em lermos IVEL (1 A 5)" 370 CLS :GOTO 1300
de palavra por minuto. Ao se digitar as 120 IF INKEYS-" " THEN GOTO 400 CLS iPRINT "DIGITE A LETR
palavras que surgirem na tela, não se de- 120 A INDICADA NA TELA"
ve esquecer dos espaços em branco en- 130 LET AS-INKEYS: IF AS<"1" 410 FOR N-l TO 100: NEXT N
tre elas; esse espaço é obtido quando se OR AS>"5" THEN GOTO 120 420 POKE 23672.0: POKE 23673,0
toca na barra de espacej amento com um
140 SOUND .2.10 430 FOR K-l TO 20
150 GOSUB VAL ASMOO + 100 440 LET RN-INT (RND*9)+1
dos polegares. No Spectrum será preci-
160 GOTO 20 450 PRINT AT 11,16;SS(RN]
so pressionar com o dedo mínimo a bar-
200 GOSUB 1000 460 LET RS-SS(RN)
ra de espaços, situada numa posição um 210 FOR K-7 TO 23 STEP 2 470 GOSUB 1100: IF C=0 THEN
tanto incómoda. 220 PRINT AT 10 K " *" ,
;

GOTO 470
Deve-se exercitar cada um dos níveis, 230 LET RS-SS((K-5)/2) 480 PRINT INVERSE 1;AT 11.16;
" " NEXT K
:

490 CLS :GOTO 1300

0*>
(6*
6 APUCAÇÓtS 6

500 CLS PHINT "DIGITE A PALA


: 90 PRINT #165, "DIGITE (0) PARA
VRA INDICADA": POKE 23672,0: SAIR"
POKE 23673.0 100 AS-INKEYS:IF AS<"0" OR AS>
510 LET TL-0: FOR N-l TO 20; 5" THEN 100
RESTORE LET RN-INT (RND*24)+
:
110 A-VAL(AS):ON A*l GOSUB 999
1 200. 300,400,600.800
520 FOR K-l TO RN; READ TS
NEXT K
530 PRINT AT 10. 13; " " ;

PRINT AT 10,13;TS 210 \?- 1 i

540 FOR M-l TO LEN TS PHINT : 10 FOR K-l TO 9

AT 9,11+Hi* * 2 30 AP-AP+2
550 LET RS-TS(M): GOSUB 1100 240 GOSUB 1100 Qual a velocidade de datilografia que
560 IF C-0 THEN GOTO 550 250 NEXT devo tomar como meta para começar?
570 NEXT M 260 CLS:PHINT #448 "TEMPO-" Na etapa inicial do curso, o mais cor-
580 LET TL-TL+LEN TS NEXT N i ER/50 "SEGUNDOS"
;

reio é preocupar -se com a precisão e


590 CLS PRINT AT I8,0:"PALAV
:
270 PRINT"NUMEHO DE não com a velocidade. Depois que se
BAS POR MINUTO- " INT <TL*500/ ; 280 RETURN consegue datilografar todas as palav
(PEEK 23672+256*PEEK 23673)+. 300 C0SUB 1000 nhurr pode
) GOTO 1300
; 310 FOH K-l TO 20 pensar em acelerar o ritmo de trabal
600 CLS PRINT "DIGITE AS PAL
; 320 AP-1252-l 2-RND (9 Deve-se praticar os Níveis 1 2 e , :

AURAS INDICADAS" LET TS"" : 330 GOSUB 1100 ,

610 FOR N-l TO 6; RESTORE : 340 NEXT tras em doze ou treze segundos; no:
LET RN-INT (RND*24)+1: FOR K-l 350 CLS Níveis 4 e 5, deve-se ter como meti
TO RN; READ XS NEXT K : 360 PRINT §448, "TEM cerca de quinze palavras ou mais po
"
620 LET TS-TS+XS+" 0 "SEGUNDOS"
!

630 NEXT N: LET TS-TS TO LEN ( 370 PRINT"NUMERO DE


TS-1) 380 RETURN
POKE 23673.0
640 POKE 23672.0: 400 CLS0 PRINT" DIG
:

PRINT AT IO.OíTS
:
INDICADA NA TELA" AS-INKEYS:IF AS-"" THEN 880
410 PRINT 3206. RI NT § IF ASOMIDSÍPS.P.l) THEN ER
650 PRINT AT 12,0;; FOR M-l TO
LEN TS 8 "
.
" PHINT §270, "
: : " -£H*l:SOUND 5.1:G0TO 880
900 POKE 1311 + P.PEEKU247+P)
660 LET RS-TS(M); GOSUB 1100 420 FOR K-l TO 20
I» 670 IF C-0 THEN GOTO 660 430 PS=MIDS (OBS 2*RND(9) -l 1)
. ,
910 SOUND 200 1 P-P-t- 1 IF P< = LEN
(PS) THEN 880
, : :

660 PRINT TS CM} NEXT M ; : 440 PRINT §239. PS;


450 AS-INKEYS:IF AS""" THEN 450 920 T-LEN(PS) :GOTO 740
690 LET TL-LEN TS; GOTO 590
PRINT "PRESSIONE A T 460 IF K-l THEN TIMER-0 999 CLS END
1000 CLS
:
:

ECLA INDICADA PELO ASTERISCO" 470 IF ASOPS THEN SOUND 5.1:ER 1000 CLS:PRINT*PRESSIONE A TECL
1010 PRINT AT 12.7;'A S D F G H =ER+1:GOTO 450 A INDICADA PELO ASTERISCO"
480 POKE 1263, 12B 1010 PRINT #262. OBS
J K L"
1020 FOR K-l TO 1000:NEXT
1020 FOR K-l TO 100: NEXT K: PO 490 SOUND 200.1
500 NEXT 1030 RETURN
KE 23672.0: POKE 23673.0
510 GOTO 350 1100 POKE AP. 106
1030 RETURN
600 CLS PRINT," DIGITE A TECLA Q 1110 AS-INKEYS: IF AS="" THEN 11
1100 PAUSE 0 :

10
1110 LET AS-INKEYS: IF ASORS T UE APARECER"
610 T=0 1120 IF K-l THEN TIMER-0
HEN SOUND .2.-10: LET ER-ER+1
1125 PR1NT#14*32.ASC(AS)
LET C-0: RETURN 620 FOR K-l TO 10 1126 PRINT#15*32.PEEK(AP+32)
1120 SOUND .05.20: LET C = l: RET 630 PS-WS<RND(Z8)) 1130 IF (ASC(ASÍ)OPEEK(AP+32)T
URN 640 T-T+LENÍPS) HEN SOUND 5,1: ER-ER+1 GOTO 1110 :

1300 PRINT AT 19,0; "TEMPO- "; tP 650 PRINT #237. PS 1140 SOUND 200,1
EEK 23672+256*PEEK I3673J/50;" 660 P-l
SEGUNDOS" PRINT "NUMERO DE ERR 1150 POKE AP. 96
:
670 POKE 1228+P.106 1160 RETURN
OS- " EH ;
680 AS-INKEYS: IF AS-"" THEN 680 9000 DATA FADA, GALA. SALA. DADA,
1310 PAUSE 100: RETURN 690 IF K*l THEN TIMER-0 SA. LAKA, ALAGA, ALADA. LA. GAS. DALL
2000 DATA "FADA" "GALA" "SALA"
. .

700 IF ASOMIDS(PS.P.l) THEN ER AS SAGA GALHADA FALA


"DADA" "ASA" "LAKA" "ALAGA" "AL
, . , . . , ,

-ER+1 SOUND 5.1: GOTO 670


:
9010 DATA AFAGA. FALHA. ADAGA. HA,
ADA" "LA" "GAS" "DALLAS" "SAGA"
, , . ,

710 POKE 1228+P.96 AGA HAJA JA HALL KA FA. AJA DAS


2010 DATA "AFAGA" "FALHA" "ADAG
, . , .

720 SOUND 200,1:P-P+1:IF PÓLEN


. . , ,

GALHAS. JAL
A" "HA" "AGA" "HAJA" "HALL" "GA
, , , , ,

(PS) THEN 670


LHAS" "FALA" "FALHA" "AJA" " JAL
. . .
. 730 NEXT
740 CLS
750 PRINT §416,USING"PALAVRAS P
OR MINUTO-M*.*#"iT"500/TIMER 5 R-RND(-TIME)
760 GOTO 360 10 0BS-"A SDFGHJKL
Ç":ZS
10 OBS-"A SDFGHJKL" 800 CLS:PS-"":FOR K-l TO 6
Bio PS-PS+WS!RND(28))+" *
-CHR$(219) :SS-"L10 02 G"
20 SCREEN1 CLS
20 CLS :

30 DIM WS(26> 820 NEXT 30 DIM WS (28)


40 FOR K-l TO 26 830 PS-LEFTS!PS,LEN(PS)-1) 40 FOR K-l TO 28
50 READ WS (KJ 840 PRINT" DIGITE ESTAS PALAVRA 50 READ WS(K)
60 NEXT 60 NEXT
70 PRINT #71, "QUAL O NÍVEL DE" 850 P-1:PHINT #224 PS , 70 LOCATE 7,4:PRINT"Qual nível
80 PRINT ©101 "DIFICULDADE 11-5
,
860 A3-INKEYS:IF AS-"" THEN 860 de"
) ?B 870 TIMER-0 :GOTO 890 80 LOCATE 5.6:PRINT"dlf lCUldad*
" 1 i ; *
; "

1IIIIIIIUM! ' «

? (1-5)' 420 FOR K-l TO 20 740 GOTO 270


90 LOCATE 3.9:PRINT"Tecle <0> P 430 PS-MIDS (OBS INT (RND(l) *10)
, 800 CLS:PS-*"
ara terminar." 2+1,1) 810 FOR K-l TO 5:PS-PS+WS(INT(R
100 AS"INKEYS:IF AS<"0" OR AS>" 440 LOCATE 1 3 1 1 PRINTPS
. : ND(1)*28)+1)+CHRS(32) :NEXT
5" THEN 100 450 AS-INKEYS:IFA$-""THEN450 820 PS-LEFTS!PS.LEN(PS)-1)
110 ON VAL(AS)+1 GOSUB 999,200, 460 IF K-l THEN TIME-0 830 PRINT"Diglte estas palavras
300,400,600.800 470 IF ASOPS THEN PLAY SS:ER=E
120 ER-0 H+l :GOTO450 840 P-l: LOCATE 0,11:PRINTPS
130 GOTO 70 480 PRINTCHRS(8) ;CHRS(32) 850 AS-INKEYS:IFAS-""THEN850
200 GOSUB 1000 490 BEEP 860 TIKE-0:G0TO 880
210 AP=3S7 500 NEXT GOTO 260
:
870 AS-INKEYS:IFAS-""THEN870
220 FOR K-l TO 10 600 CLS:PRINT"Digite a palavra 880 IF ASOMIDS(PS.P,l)THEN PLA
230 AP-AP+2 que aparecer:" Y SS ER-ER+1 :GOTO 870
:

240 GOSUB 1100 610 TL-0 890 L0CATE-1+P,14:PRINTMIDS(PS,


250 NEXT 620 FOR K-l TO 10 P.l)
260 CLS 630 PS-WS{INT(RND(1)*28>+1) 900 BEEP:P-P+1;IF POLEN(PS) TH
270 LOCATE 5, 12 PRINT"Tempo
: ; 640 T-LEN(PS) TL-TL+T L-INT
: 30 : ( ( EN 870
INT (TIME/60) "segundos
; .
-T)/2) 910 TL-LEN(PS) :GOTO 730
280 LOCATE 6 PRINT B Numero de er
: 645 LOCATE 0,11:PRINTSPACES(30) 999 SCREEN0 END
;

roa -":ER; 1000 CLS:PHINT"Dioite o caracte


290 RETURN 650 LOCATE L, 11: PRINTPS r indicado pela aeta:
300 GOSUB 1000 655 FOR J-l TO T 1010 LOCATE 5,12:PRINTOBS
310 FOR K-l TO 20 660 LOCATE L 10 PRINTCHRS (205)
, : 1020 FOR K-l TO 1000:NEXT
320 AP-359+INT(RND(l)*10)*2 670 AS-INKEYS:IFAS-""THEN670 1030 RETURN
330 GOSUB 1100 660 IF K-l THEN TIME-0 1100 UPOKE BABE(S)+AP,205
340 NEXT 690 IF ASOMIDSÍPS.J.DTHEN PLA 1110 A5-INKEYS:IF AS-""THEN 111
350 GOTO 260 Y SS;ER-ER+l:GOTO 670 0
400 CLS:PRlNT"Digite a letra mo 700 LOCATE L 10 PRINTCHRS (32);
, : 1120 IF K-l THEN TIME-0
strada na tela:" 710 BEEP:L-L+1:NEXT 1130 IF ASCtASJOVPEEK (BASE (5)
410 LOCATE 11,9:PRINTZS;ZS:ZS;Z 720 NEXT +32+AP)THEN PLAY SS ER-ER+1 GOT
: :

S: LOCATE 11:PRINTZS;" ";ZS:LOC 730 CLS:LOCATE 2,16:PRINT "Pala O 1110


ATE ll:PRINTZ$i" " ZS LOCATE1
; : vraa por minuto " PR INT USING
:
; : 1140 BEEP
:PRINTZS;ZS;ZS;ZS "M#.|#";TL*600/TIME 1150 VBOKE BASE(5)+AP,0
"

III
: :

6 APUUÇÕIS 6

1160 RETURN
9000 DATA FADA, SALA. ADAGA, DADA,
FACA FA GALA HAJA AGA HALL ALAD
, , , , , .

A. ASA, GAS. FALHA


9010 DATA FALA, LAÇA, ALAGA, LAKA,
SAGA JA AJA AFAGA GALHADA DALLA
, , . . ,

S.LA, HA. AS SA, LAJA

0HOME
0DIM WS (28)
0FOB K - 1 TO 28:
NEXT
0HTAB 14: VTAB 5:
nível de"
0PRINT HTAB 12: PBINT "dif
:

culdade? 1-5)"
0 HTAB 9 VTAB 11: PHINT "Tec
e <0> par; teri nar [

GET AS IF AS
"5" THEN BO
90 ON VAL (AS) + 1 GOSUB 999
200,300.400,500,600
100 ER - 0
110 GOTO 50
200 GOSUB 1000
210 AP - 2
220 FOR K - 1 TO 10:AP - AP +
3: GOSUB 1100: NEXT
230 HOME
240 VTAB 15: HTAB 12: PRINT
umero de erros " ";ER;
250 RETURN
300 GOSUB 1000
310 FOR K - 1 TO 20
320 AP - 2 + INT RND (1) (

0+1) * 3
330 GOSUB 1100: NEXT
340 GOTO 230
400 HOME PHINT "Digite a let
:

ra mostrada na tela:"
410 VTAB 9: HTAB 18: INVERSE :

"
PRINT " ": HTAB 16: PRINT
"; HTAB 18: PBINT "
420 FOR K - 1 TO 20:PS - MIDS
(OBS. INT ( RND U) * 10 + 1)
3 2.1) 7) ER - EH +
; : 1 : GOTO 570 680 GOTO 230
430 VTAB 10: HTAB 19: PRINT PS 580 A - PEEK ( - 16336) :A - P 999 HOME END :

; CHRS (8) EEK ( - 16336) PRINT CHRS (32


: 1000 HOME PRINT "Digite O ca
:

440 GET AS: IF AS < > PS THEN ) NEXT


; :
racter indicado pelo a
PRINT CHRS (7);:ER - ER + 1 585 NEXT sterisco:
GOTO 440 590 GOTO 230 1010 VTAB 12: HTAB 5: PRINT OB
450 A - PEEK - 16336) :A - P ( 600 HOME :PS - "" S
EEK - 16336)
( NEXT NORMAL : : : 610 FOR K - 1 TO 6:PS - PS + W 1020 FOR K - 1 TO 500: NEXT
GOTO 230 S( INT RND (1) * 28) + 1) +
( 1030 RETURN
500 HOME PHINT "Digite a pai
: CHRS (32) NEXT : 1100 POKE 1319 + AP, 170
avra que aparecer:" 620 PS - LEFTS (PS. LEN (PS) - 1110 GET AS: IF ASC (AS) < >
510 TL - 0 1) PEEK (1319 + AP + 128) - 128
520 FOR K - 1 TO 10 630 PRINT "Digite estas palavr THEN PRINT CHRS (7);: EH - ER
530 PS - WS( INT RND (1) * 28 <
+ i: GOTO 1110
640 P - 1: VTAB 11: HTAB 4: PHI 1120 A - PEEK - 16336) :A -
1) (

540 T - LEN (PS) IL - INT { (40 NT PS PEEK - 16336)


( POKE 1319 + AP :

- T) / 2) 650 GET AS: IF AS < > MIDS ( ,160


550 PRINT : VTAB 11: CALL - 9 PS.P.l) THEN PRINT CHRS (7);: 1130 RETURN
58: HTAB L: PRINT PS ER - ER + 1: GOTO 650 9000 DATA FALA, AGA, AFAGA, GAS,
560 FOR J - 0 TO T - li VTAB 1 660 VTAB 15: HTAB P + 3: PRINT SALA DADA HAJA HALL LAKA ASA AL
, . , . , ,

0 HTAB J + L PRINT *"; CHRS


: : MIDS ÍPS.P.l) ADA ASDFG SAGA KAKA
, , ,

670 A - PEEK - 16336) :A -


( P 9010 DATA AJA. FA, ALAGA, JA, AGA
> MIDS ( EEK ( - 16336) :P - P + 1: IF P ,HA GALHADA FALHA GALA FADA DAL
, , , , ,
2
<

( < - LEN (PS) THEN 650 LAS ASSADA LALA LKJH


, , , :
IIIIIIIIIHHM lllllllll
Códigos de controle podem ser usados
no lugar de muitos comandos em
BASIC. Entrados diretamente por meio
do teclado em certos micros,
eles proporcionam uma ação imediata.

Os códigos de controle correspon-


dem, na maioria dos micros, aos códi-
gos de 0 a 31 no sistema ASCII, e ser-
vem para realizar uma série dc funções
relacionadas principalmente com o con-
trole do vídeo.
Caso você não saiba ainda, ASCII é
um sistema de codificação padronizado
mundialmente e utilizado por quase to-
dos os computadores. ASCII significa
American Standard Code for Informa-
tion Interchange (Código Padrão Ame-
ricano para Intercâmbio de Informa-
ção), e se pronuncia ásqui.
Originalmente, os códigos de contro-
le do ASCII correspondiam às funções
básicas de transmissão de um terminal
ligado ao computador: início de trans-
missão, sinal de atenção, fim de trans-
missão, acionamento da campainha do
terminal, etc.
Entretanto, cada fabricante de micro-
computadores aproveitou a faixa de có-
digos de 0 a 31 para implementar fun-
ções diferentes. Com poucas exceçôes,
portanto, a maioria dos códigos de con-
trole não c padronizada, como aconte-
ce com os códigos correspondentes a ca-
racteres comuns (letras, números, sinais
matemáticos c de pontuação, etc.).
forma, se acionarmos um comando da linha seguinte:
0 ACESSO AOS CÓDIGOS DE CONTROLE PRINT associado a um ou mais carac- liga o cursor;
teres de controle, poderemos realizar desliga o cursor;
uma série de tarefas básicas (até mesmo converte a tela para a largura de
Existem duas técnicas básicas de uti- algumas que normalmente podem não 32 caracteres;
lização de códigos dc controle. de- Uma ser acessíveis por intermédio de coman- retorna o cursor à posição 0,0,
las —mais universal —
pode ser apli- dos BASIC). A seguir, damos alguns sem apagar a tela;
cada a qualquer microcomputador que exemplos para o TRS-80 (os outros move o cursor para o começo da
disponha da função CHRS no interpre- computadores serão abordados na con- linha;
tador BASIC. A outra é aplicável ape- tinuação deste capítulo). apaga da posição do cursor até
nas a alguns computadores: é a entrada o final da linha;
direta dos códigos de controle por inter- apaga o espaço que vai da posi-
médio do teclado. A tecla rotulada ção do cursor até o final da tela.
CONTROL (ou ainda CTRL), existente Você já conhece a instrução CLS,
em muitos micros, deve ser pressionada que serve para limpar a tela e retornar Uma sequência de caracteres de con-
em combinação com outras teclas, pa- o cursor à posição superior esquerda do trolepode ser colocada também dentro
ra introduzir o código de controle nu- vídeo. Não seria interessante se pudés- de uma cadeia de caracteres, por meio
ma linha de comando ou de programa. semos apagar a tela apenas de um de- da função STRINGS. Por exemplo:
A função CHRS
(abreviatura de cha- terminado ponto para baixo ou até o fi- PRINT STR!NG$(5,10> provoca o
racter) permite converter um código nu- na! de uma linha? Efeitos desse tipo são avanço do cursor cinco linhas para bai-
mérico inteiro, situado entre Oe 255. ao facilmente obtidos por meio da combi- xo. Esse comando corresponde à ação
seu caractere correspondente. Por exem- nação do comando PRINT CHRS(n) de pressionar a tecla com a flecha para
plo, PRINT CHRS(65) escreverá na te- com os seguintes códigos: baixo cinco vezes seguidas, com a van-
la a letra A
(maiúscula). 8 - recua e apaga o último caracte- tagem de poder ser colocado dentro de
A função CHRS funciona também re na tela; um programa (corresponde a cinco co-
mandos PRINT em branco).
I

com os caracteres de controle. Dessa 1 0 - avança o cursor para o começo


.

19 PROGRAMAÇÃO BASIC 19

©S COMA»©!
0 EXAME DA MEM
ESCREVA NA TELA COMO PQKE
CARACTERES NO SPECTRUM
COR ES NO TRS-COLOR
POKE COMO CONTROLAR O APPLE II

Os comandos PEEK e POKE permitem


examinar e alterar valores diretamente
na memória do computador. E você
pode usa los sem dificuldade
Mas existe em BASIC uma maneira de memória endereçáveis; portanto,
incorporados a um programa BASIC.
de examinar a memória do computador, 64K. O Apple c o TK-2000. em suas di-
para localizar os valores ali armazena- versas versões, apresentam diferentes ta-
dos. É possível, também, armazenar va- manhos de memória. Uma parte dessa
Muitas vezes, usamos o computador lores apropriados na memória, a fim de memória é a ROM, ou seja, a Memória
sem nenhuma necessidade de saber co- alterar o comportamento da máquina. Apenas para Leitura. Os conteúdos da
mo sua memória funciona. Quando es- As ferramentas BASIC para isso são ROM são fixos; assim, embora possa-
crevemos, por exemplo, LET A = 67, o PEEK e o POKE. PEEK permite que mos examiná-la usando PEEK, não po-
o computador por si só seleciona posi- se examine o valor armazenado na me- demos utilizar o POKE para armazenar
ções de memória livres, chama estas po- mória e POKE possibilita o armazena- novos valores ou alterar os que nela já
sições de "A" e nelas armazena o valor mento de um determinado valor. existem. O restante da memória é a
67. Se digitarmos, em seguida, PR1NT —
RAM a Memória de Acesso Aleató-
A, o computador saberá exatamente on-
de encontrar o valor pedido o pro- — COMO FUNCIONAM 0 PEEK E 0 POKE
cesso é automático. Só é necessário in-
dicar ao computador as posições de me- Os computadores TRS-80, TRS-Co-
mória que devem
programamos em
ser usadas quando
código de máquina.
lor.MSX. bem como os ZX-81 e Spec-
trum de 48K, possuem 65 536 posições

3?

12460
1 v J í*61 J - •
19 PROGRAMAÇÃO BASIC 19

rio, ou Memória para Leitura c Escri- mazene apenas bytes simples, ou seja, sejarmos. Repare que nada acontece *
ta, como também é conhecida — na , qualquer número entre 0 e 255. tentarmos usar POKE na ROM e não
qual se armazenam as variáveis e os pro- causaremos nenhum dano ao sistema se
gramas BASIC. Podemos usar PEEK o fizermos. Utilizado em cenas áreas da
para examinar e POKE para armazenar RAM, porém, o POKE pode provocar
os valores ali contidos. algum desarranjo, mas nada fatal —
10 PBINT"CONTEUDO. . .
" ;PEEK(3000 simplesmente desligue a máquina por
Este programa permite que você exa-
mine qualquer posição de memória ) um momento, para reiniciar a memória.
20 INPUT"NUMEBO " ;N
Tente agora utilizar o POKE para ar-
ROM ou RAM do computador: 30 POKE 30000
mazenar um número maior do que 255
,

40 PP,INT"NOVO CONTEUD0":PEEK(30
000) e veja o que acontece. Nos computado-
45 PBINT res TRS-Color e Spectrum, você obterá
50 GOTO 20 uma mensagem de erro, já que só há lu-
gar para um byte em cada posição de
10 INPUT "ENDERECO. " ;A
20 LET N-PEEKtA)
. .

O programa apresenta primeiro o memória.


30 PBINT "CONTEÚDO . .
.
* ;N conteúdo da posição de memória e, em
40 COTO 10 seguida, usa o POKE para armazenar ali
o número indicado. Depois, mostra uma
Entre com o número que desejar, de vez mais o conteúdo, para provar que
0 a 65 535, e você verá o que existe na o número realmente foi armazenado.
posição indicada. Pode ocorrer, porém, Podemos trocar a posição de memó-
que ao usar PEEK para examinar deter- ria para qualquer outra posição que de-
minadas áreas da memória, você rece-
ba como resultado um valor fictício e
não o valor real lá existente. Os conteú-
dos da RAMdependerão sempre do que
você estiver fazendo com o computador;
apenas os conteúdos da ROM
são Fotos.
Repare que os números são sempre
valores inteiros entre 0 e 255 e, em he-
xadecimal, de 0 a FF. Isso significa que
todos constituem bytes simples (um byte
contém um número hexadecimal de dois
dígitos). Cada posição de memória con-
tém um byte, não sendo possível guar-
dar qualquer número maior em uma po-
sição de memória. Se você somar 1 a FF,
em hexadecimal, obterá 0100. Como es-
te resultado inclui dois bytes, será pre-
ciso armazená-lo em duas posições de
memória: 01 em uma posição e 00 em
outra.
O programa que apresentamos a se-
guir permiteque empregue o coman-
se
do POKE para guardar números na me-
mória do computador. Neste estágio, ar-
» P*0GRmACÃ08AS<C 19

TABELA DE CÓDIGO ASCII


Cada caractere que o computador uti-
liza possui um código numérico, e mui-
tos modelos adotam um código padrão
denominado Código ASCII iniciai!—
de American Standard Code for Infor-
mation Interchange (Código Padrão
Americano para Intercâmbio de In-
formação).
Estes códigos são os números usados
ESCREVA NA TELA COM O POKE em CHR$ e ASC (ou CODE no Spec-
trum).CH RS converte o número em um
caractere, enquanto ASC ou CODE faz
Examinando os mapasde memór o inverso, convertendo um caractere em
apresentados no artigo da página 174 seu código numérico.
você verificará que uma porção da Assim, quando o computador guarda
mória é dedicada à exibição em tela. uma palavra, o que armazena
usar o POKE para armazenar certos nú- é o código ASCII do caractere. | Taba!
meros nesta área, os caracteres realmen-
te aparecerão na tela. Para ver determi-
nado caractere, armazene códigos AS- Número Caractere Número Caractere
CII, empregando o POKE, nos compu- de código de código ASCII
tadores TRS-80, TRS-Color e TK-2000.
No Apple, os valores ASCII produzirão 32 space 62
caracteres piscantes; para obter carac- 33 ! 63 ?
teres normais, some 128 ao código AS- 34 64 @
CII. Nos micros da linha Sinclair e 35 # 65 A
MSX, utiliza-se um método diferente do
36 S 66 B
descrito abaixo.No TK-2000, a organi- 37 67 C
zação da tela não permite tal exibição. D
38 & 68
Tente as seguintes linhas:
39 69 E
40 ( 70 F
41 1 71 G
42 * 72 .H
43 73
44 74 J
45 75 K
46 76 L
47 / 77 M
48 0 78 N
49 1 79 0
50 2 80 P
51 3 81 Q
52 4 82 R
53 5 83 5
54 6 84 T
55 7 85 U
56 8 86 V
57 9 87 w
58 88 X
59 89 Y

.460 60
61
< 90 2
. ; ;

IIIIIIIIIIIHM lllllllll
Q
POKE 15360,65
As linhas 1 0 e 40 determinam a repe-
tição do processo em toda a memória;
a linha 20 examina cada posição, usan-
Alinha 10 define o endereço da pri- do o POKE, e a linha 30 converte o nú-

a
POKE 1024,65
meira tinha dos caracteres da tela. O
FOR...NEXT permite o acesso à ROM,
onde o caractere está armazenado e a li-
nha 30 imprime a primeira linha deste
mero em um caractere e o imprime. Es-
ta linha ainda limita o intervalo de nú-
meros que serão convertidos, evitando
que o computador imprima códigos de
caractere na tela. A linha 40 incremen- controle ou símbolos gráficos.
ta o endereço da tela em 256, dando Para o TRS-80, use o programa do
SE acesso à próxima linha, logo abaixo da TRS-Color com a linha 10 do progra-
primeira. ma do Spectrum.
HOME POKE 1024.193
:

O
método funciona, mas, por ser um Pode-se também imprimir o conteú-
tanto lento, quase sempre é mais vanta- do da RAM do mesmo modo, bastan-
A letra A deverá aparecer no canto joso usar o PRINT AT ou PRINT TAB do trocar os endereços de memória da
superior esquerdo da tela. no Spectrum. linha 10. Os endereços dados abaixo im-
No TRS-Color, se a tela tiver rolado primem parte da área em que os progra-
antes de uma tentativa de armazenar ca- mas BASIC estão armazenados, permi-
racteres pelo POKE, eles não aparece- tindo que você veja como o seu próprio
rão em lugar nenhum. Assim, primeira- programa está guardado na memória.
mente limpe a tela, digitando CLS e, de- Quando executamos o primeiro pro- Convém desligar o computador por um
pois, < RETURN > ou < ENTER > grama que examina a memória do com- segundo antes de rodar este programa,
Você deve estar se perguntando qual putador, obtivemos apenas números en- para evitar que a RAM permaneça car-
a vantagem de usar o POKE
para colo- tre 0 e 255. Mas muitos desses números regada com restos de outros programas.
car caracteres na tela, já que dispomos são, na realidade, códigos de letras em Aqui está a nova linha 10:
de comandos tão eficientes como o ASCII, alguns dos quais formam pala-
PRINT A, PRINT TAB ou PRINT®. vras ou mesmo sentenças completas. Se
De fato, o PRINT é normalmente o mé- você não conhece os códigos ASCII, ve-
todo mais fácil e conveniente para po- ja a tabela da página 263.
sicionar os caracteres. Mas há casos em O programa seguintetoda a memó-

10 FOR A-23755 TO 65000
que o emprego do POKE se mostra van- ria ROMdo computador e converte os
tajoso. Por exemplo, se usarmos o números em caracteres, antes de impri-
PRINT para escrever na última posição mi-los na tela:
da tela, esta sempre rolará; com o PO- 10 FOR A-16510 TO 30000
KE, ao contrário, não haverá nenhum
problema. Você pode imaginar o quan-
to esta característica é útil, sobretudo em 10 FOR A-0 TO 16393 Qj
jogos, quando queremos mover um ca- 20 LET N-PEEK A
ractere por toda a tela. 30 IF N>31 AND N<127 THEN PRINT 10 FOR A-IH1E00 TO &.H1F00
CHR$N;
40 NEXT A
OS CARACTERES NO SPECTRUM
Use FOR 17385 TO 32767 para sis-
No Spectrum,as coisas são um pou- temas de 16K e os finais 49151 para 32K
co diferentes, pois não se pode usar o e 65535 para 48K.
10 FOR A-.VH8000 TO &.HBFF
POKE para armazenar caracteres sobre
20 N-PEEK (A)
a tela. Um
caractere é feito de pontos
30 IF N>31 AND N<127 THEN PRINT
de uma matriz de oito por oito. E cada CHRS (N> BE
linha deve ser armazenada pelo POKE 40 NEXT A
separadamente, até se completar o ca- 10 FOR A - 2048 TO 32767
ractere.
Felizmente, as formas dos caracteres
são armazenadas na ROM; assim, pode-
se usar o PEEK nesta porção da memó- 10 FOR A-LH0 TO Í.H7FFE 10 FOR A-Í.H8000 TO &.HF37F
ria, a fim de examinar cada linha e, en- 20 N-PEEK (A)
tão, exibi-la na tela com o POKE. 30 IF N>31 AND N<127 THEN PRINT Experimente examinar outras áreas
O programa que apresentamos a se- CHRS (Ni ; da RAM da mesma maneira.
guir utiliza o comando POKE para exi- 40 NEXT A
bira letra A no canto superior esquer-
do da tela.
BE Até aqui examinamos a memória do
10 FOR A - 53248 TO 65535 computador e usamos POKE para
20 N - PEEK (A) exibir caracteres na tela. Isso nos deu
10 LET dest-16384 30 IF N > 31 AND N < 127 THEN uma boa noção de como o PEEK e o
20 FOR a-15880 TO 15887 PRINT CHRS (N) POKE funcionam, mas não do quanto
I 30 POKE dest .PEEK a 40 NEXT A são úteis.
. K

IIIIIIIIIIIH1 » PROGRAMAÇÃO BASIC ,9 |U|||||||||||


Para as aplicações mais importantes, três bytes em três posições consecutivas uma tecla, um código numérico especial
precisaremos examinar posições especi- de memória. é colocado em uma das seis posições de
ficas de memória. No Spectrum, a po- memória. OPEEK checa, então, estas
PRINT PEEK 23672+256*P£EK 23673
(
posições, para verificar que tecla está
sição de memória 23609 controla o som +65536*PEEK 23674)
que o teclado faz quando se pressiona sendo pressionada. O
emprego deste re-
uma tecla. Normalmente, ela contém 0, ... informará quantos cinquenta avos de curso é muito simples. O
programa se-
que provoca um pequeno clic; mas, com segundo o seu Spectrum está ligado des- guinte, por exemplo, usa teclas de cur-
um número maior —
que pode chegar de o último NEW. Pressione NEW pa- sor para desenhar na tela:
a 255 —
obtém-se um longo bip. PO-
, ra reiniciar o cronômetro ou POKE 0
10 PMODE 0.1
KE 23609,80 faz um ruído razoável. em cada uma das três posições. 20 PCLS
As possibilidades de uso do PEEK e 30 SCREEN 1,1
do POKE dependem principalmente do 40 X-127:Y-95
computador que você tem. 50 IF PEEK(341)-223 THEN Y-Y-2
Retomando o exemplo anterior: os 60 IF PEEK(342)-223 THEN Y-Y+2
teclados dos demais computadores não Apresentaremos aqui mais duas apli- 70 IF PEEK-043J-223 THEN X-X-2
fazem ruído quando uma tecla é pres- cações do POKE, que serão úteis quan- 80 IF PEEK(344)-223 THEN X-X+2
sionada; não têm posição de memória do você quiser escrever programas para 90 IF X<0 OB X>255 THEN X 255» —
outra pessoa. A primeira delas assegu- (X<0)
que controle o som do teclado. Assim,
um efeito que requer cinco ou seis PEEK ra que todas as letras digitadas apare- 100 IF Y<0 OR Y>191 THEN Y— 191
*(Y<0)
ou POKE em determinado computador çam em tipo maiúsculo. 110 PSET (X.Y.5)
pode ser obtido com uma palavra-chave 120 GOTO 50
BASIC em outra máquina. POKE 23568.6
O Apple faz um bom uso do PEEK Esta instrução é útil quando se pre- A tabela da página 265 mostra o có-
e do POKE. O Spectrum, o TRS-80 e'o digo numérico gerado para cada tecla e
tende que todos os dados de entrada se-
TRS-Color utilizam- no ocasionalmen- jam consistentes. Use POKE 23658,0 a posição de memória em que elas são
te. No MSX o uso destes comandos é armazenadas. Se, por exemplo, pressio-
para retornar ao normal.
mais raro. Uma outra possibilidade é a altera- nássemos A, PEEK (339) seria igual a
Aqui estão algumas aplicações para 267. Podemos verificar, assim, de onde
ção do cursor para qualquer caractere
o seu computador. do teclado —
ou mesmo qualquer pala- vieram os números escritos após os
vra-chave, dependendo do número que PEEK nesse último programa.
foi usado no POKE:
TELA MULTICOLORIDA
10 FOR X-l TO 255
Já vimos um POKE modificar o som 20 POKE 23617.X
do teclado. O POKE seguinte altera o 30 INPUT aS
Oprograma seguinte traça linhas de
espaço de tempo que uma tecla leva pa- diferentes cores na tela. Colocando-as
40 NEXT X
ra iniciar a auto-repetiçào — o que é útil perto umas das outras, obteremos no-
em jogos de velocidades, nos quais uma A linha 30 faz um INPUT a$ apenas vos matizes. Você pode pressionar qual-
tecla precisa ser pressionada para mo- para que o cursor apareça na tela. Tão quer tecla durante a execução do pro-
ver um caractere. Neste caso e nos se- logo entre algum dado via INPUT, o grama, se quiser interromper o desenho
guintes, X é uma variável que devemos programa mostrará o cursor seguinte. e examinar o número para determina-
ajustar por meio do comando. Os mais interessantes são aqueles por do matiz.
volta de X = 200 até 230. Por exemplo,
10 PMODE 3.1:SCREEN 1,0:PCLS3
POKE 23561.X X = 210 exibe < CONTINUE > como 20 FOR K-0 TO 255
Normalmente, quando se liga o com- um cursor, e X = 225 exibe um sinal de 30 POKE 178.
putador, X é ajustado para 35. Assim, interrogação. 40 LINE(78,46>-U7B, 146) .PSET. B
use um número menor que 35 para di- F
minuir o intervalo de espera e um nú- 50 IF INKEYSO"" THEN 80
mero maior para obter um intervalo 60 NEXT
70 GOTO 70
mais longo.
80 CLS:PRINT K
Pode-se também alterar a repetição O PEEK e o POKE também uti-
são
automática com: lizados para a auto- repetição. O TRS- A posição de memória 178 controla
Color normalmente não tem teclado au- a cor do primeiro plano. Esta varia, em
POKE 23562.X
to-repetitivo.Para mover objetos em jo- geral, de 0 a 3 (4 cores), mas, se usar-
Este tempo X é, em geral, igual a 5. gos, por exemplo, é preciso manter a te- mos o POKE para armazenar um valor
Assim, use X = 1 para uma auto- cla pressionada, soltá-la muito rapida- maior que K = 3, obteremos novas lis-
repetição rápida e X = 25 para uma mente, voltar a pressioná-la e, assim, su- tras coloridas.
bem lenta. cessivamente. Uma maneira de evitar es- Utilizamos PSET na linha 40 porque
se cansativo procedimento é usar PEEK estamos manipulando cores de primeiro
para verificar que tecla está sendo pres- plano. Para trabalhar as cores de plano
CONTROLE DE TEMPO sionada, o que nos permite deixar o de- de fundo, troque PSET por PRESET e
do sobre a tecla pelo tempo que qui- substitua o valor 178 na linha 30 por 179.
OSpectrum não tem acesso ao cro- sermos. Parando o programa, poderemos
nometro interno via teclado. Para utili- Esse método já foi empregado na examinar o valor de K para determinado
zá-lo. precisaremos usar o PEEK na me- seção de Programação de Jogos. Veja matiz e, assim, usar esta cor em outros
mória. O tempo é armazenado como como funciona: quando pressionamos programas gráficos.
19 PROGRAMAÇÃO BASIC 19

30 PBINT "JANELA "; POKE -16304.0


COMO ALTERAR A VELOCIDADE 40 GOTO 30
Troca a tela de textos pela tela g
Outra utilidade destes comandos é
ca, sem limpar esta última.
A possibilidade de acelerar o compu- possibilitar uma "varredura do tecla-
tador é interessante, sobretudo, para jo- do", verificando o valor contido na po- POKE -16303,0
gos —você pode fazê-los andar mais de- sição - 16384 —
sendo maior que 127,
Troca a tela gráfica de qualquer tipo
pressa se, por exemplo, o jogador atin- sabe-se que alguma tecla foi pressiona-
pela tela de textos, sem redefinição da
gir um determinado número de pontos, da. Na realidade, esta posição de memó-
janela de textos.
Utilize o primeiro POKE para acele- ria contém o código ASCII do caracte-
rar e o segundo para voltar ao normal. re da tecla pressionada mais 128. POKE -16302,0
Sempre que fizermos esse tipo de
Permite a exibição de gráficos em tela
"varredura", devemos colocar o valor
cheia, ou seja, impede o aparecimento
Ona posição -16368, para que uma no-
Pode-se usar qualquer número em lu- de texto nas quatro linhas inferiores da
va verificação seja possível. O desrespei-
gar do 1, pois o efeito será o mesmo. tela gráfica.
to a esta regra pode prejudicar seus pro-
Existe apenas um problema com es- gramas. O programa que se segue exem- POKE -16301,0
tes POKE — como eles não funcionam plifica a utilização desse recurso.
em qualquer processador, corre-se o ris- Troca a tela cheia por gráfico mais
co de que o programa prejudique o sis- 10 HOME texto, ou seja, faz reaparecer as quatro
tema. Mas não custa nada experimentá- 20 A - PEEK ( - 1639-1): POKE linhas de texto na parte inferior da tela.

los uma vez em seu computador.


- 16368.0
30 IF A > 127 THEN PRINT CHR POKE -16300.0
E, agora, se você considera determi-
nado jogo muito rápido, aqui está uma S (A - 128) ; Passa da página 2 para a página I.
maneira de desacelerar a saída na tela.
40 GOTO 20 Não limpa a tela nem move o cursor.

POKE 359,60
O programa funciona como uma má- POKE -16299,0
quina de escrever. Os caracteres corres-
Passa da página para a página 2,
Para voltar ao normal, use POKE pondentes às teclas pressionadas são
1

359.67. mas não no CP-400 Color, pois mostrados no vídeo. da mesma maneira.
ele desativa o retorno automático ao O uso do PEEK também possibilita
modo texto. a produção de sons. Toda vez que veri-
ficamos o conteúdo do endereço
- 16336, um clic é produzido. Faça uma
experiência, adicionando as linhas abai-
xo ao programa anterior.
No Apple é possível controlar a por-
ção da tela que iremos utilizar. O ende- 30 IF A > 127 THEN PRINT CHR
reço 32 contém a margem esquerda; 33, S (A - 128);: FOR I - 1 TO 10:X
a largura máxima da linha; 34, o núme-
- PEEK ( - 16336) : NEXT
ro de linhas da margem superior e 35,
da margem inferior. Modificando os va- COMO ALTERAR A TELA
lores desses endereços com POKE,
pode-se programar a janela de textos. E O
Apple pode mostrar texto e gráfi-
o que faz o programa seguinte. cos de baixa e alta resolução em duas
5 HOME VTAB 5: HTAB 11
:
"páginas diferentes". Alguns POKE
.10 POKE 32,10: POKE 33,20 são capazes de modificar rapidamente
|20 POKE 34.4: POKE 35,20 as características da tela.
ACAOBASIC IHHHIIIIIIIII
e POKE realmente úteis. 10 SCREEN 2 10 SCREEN 3
20 FOR 1-0 TO 767 30 VPOKE BASE(15)+I.O
O modo como
computador or-
este
30 VPOKE BASE(10>+I,0 60 VPOKE BASE(17)+I,RND(1)«256
ganiza sua memória de vídeo impede
40 NEXT
que coloquemos caracteres direlamente
50 FOR 1-0 TO 7
na tela, usando POKE. Para isto, exis- Nas telas de texto, boa parte da me-
60 VPOKE BASEUD+I.RND<1)*256
te no BASIC do MSX o comando VPO- 70 VPOKE BASE(12)+I.RND(11*256 mória é utilizada paraarmazenar os pa-
KE, bem como o correspondente 80 NEXT drões das leiras —
de uma forma seme-
VPEEK. Os 16 kbytes da memória de 90 GOTO 50 lhante aos padrões gráficos. Assim,
vídeo só podem ser acessados por meio quando colocamos na tabela de nomes
desses dois comandos. As linhas de 20 a 40 enchem a tabela um código ASCII, o computador mul-
O computador utiliza essa memória de nomes com o número 0. Este núme- tiplica este valor por 8, para obter a pO'
não só para mostrar caracteres e gráfi- ro é multiplicado por 8, dando 0. Isso sição em que a forma de letra está ar-
cos; parte dela armazena informações significa que o computador irá aos oito mazenada na tabela de padrões. O en
para o vídeo, tal como o padrão das le- primeiros endereços a partir da posição dereço inicial desta tabela está em BA'
tras do conjunto de caracteres. 0 na tabela de padrões, para obter o pa- SE (2), na tela de 40 colunas. O progra-
O modo como isso é feito — ou se- drão: e aos oito primeiros endereços a ma a seguir mostra na tela estes padrões,
ja, a organização da memória de ima- partir da posição 0 da tabela de cores, depois de lê-los com VPEEK.
gem —
varia conforme o tipo de tela es- para obter a combinação de cores des-
colhida pelo comando SCREEN. tas posições. Como ainda não há nada 10 SCREEN 0
20 FOR 1-65 TO 191
Para que não tenhamos que decorar nas duas tabelas, nenhum desenho é fei-
30 VPOKE BASE (01+1,1
uma grande quantidade de endereços de to a princípio.
40 FOR J-0 TO 7
memória, o MSX usa variáveis do sis- As linhas de 50 a 80 preenchem as oi- 50 A-VPEEK(BASE(2)+8*I+J)
tema para guardar os endereços. to primeiras posições, a partir do ende- 55 ZS-"00000000-+BINS(A)
Vamos tentar entender esta organi- reço 0, da tabela de padrões com núme- 60 LOCATE 10,10+J:PRINT RIGHTS
zação. No modo texto de 40 colunas ros aleatórios. Fazem o mesmo com os ZS.8)
(SCREEN 0), a variável BASE (0) con- endereços da tabela de cores. Estes são 70 NEXT J:FOH K-l TO 500:NEXT K
tém o endereço inicial de uma porção da justamente os locais onde o computador 80 NEXT I
memória denominada tabela de nomes vai buscar a cor e o padrão de posições
Qualquer valor colocado em uma das da tabela de nomes que tenham o nú- Mude algumas linhas para obter o
960 posições, a partir deste endereço, fa- mero 0. Como a tabela de nomes está mesmo resultado na tela de 32 colunas,
rá surgir na tela o caractere de código cheia de zeros, todas as posições do ter- onde a tabela de padrõesfica em BASE
ASCII correspondente. Assim, o pro- ço.superior da tela assumirão a mesma (5).
grama seguinte enche a tela com o ca- cor e padrão simultaneamente. A linha
10 SCREEN 1
ractere A, cujo código é 65. 90 repete o processo.
30 VPOKE BASE (5)+l ,

Você deve estar se perguntando pdr 50 A-VPEEK(BASE(7)+8*I+J)


10 SCREEN 0 que o efeito só foi obtido no terço su-
20 FOR 1-0 TO 959 Na tela de 32 colunas podemos ob-
perior da tela. A explicação está no fa-
30 VPOKE BASE10)+I.65
to de que 255 é o maior valor que um ter também caracteres coloridos. Para
40 NEXT
endereço pode conter. Assim, o compu- isso, existe uma tabela de cores com ape-
Note que, para colocarmos o carac- tador procurará o padrão e a cor de um nas 32 posições. O número reduzido de
tere A na i-ésima posição da tela, deve- determinado endereço da tabela de no- posições significa que cada conjunto de
mos usar VPOKE BASE (0) + 1,65. mes da seguinte forma: o terço superior oito caracteres terá necessariamente a
No modo texto de 32 colunas, BA- da tela tem suas cores e padrões nos en- mesma cor, conforme seu código ASCII
SE (5) contém a tabela de nomes e exis- dereços de 0 a 2055 das tabelas de cores — não conforme sua posição na tela.
tem 768 posições na tela. Assim, temos e padrões; o terço médio, dos endereços O programa seguinte demonstra isto,
um programa análogo. de 2048 a 4096; e o terço inferior, de imprimindo todo o conjunto de carac-
4097 a 6143. Mude as seguintes linhas enchendo a tabela de co-
teres e depois
10 SCREEN 1 no programa anterior, para ver o mes- res — BASE (6) — com cores aleatórias.
20 FOR 1-0 TO 767 mo efeito no terço médio da tela:
30 VPOKE BASE(5)+I,65 10 SCREEN l
40 NEXT 60 VPOKE BASE(11)+I+2048.RND(1) 20 FOR 1-0 TO 255
O modo gráfico de alta resolução *256 30 VPOKE BASE(5)+I,I
70 VPOKE BASE<12)+I+2048,RND(11 40 NEXT I
também possui uma tabela de nomes,
»256 50 FOR 1-0 TO 31
cujo endereço inicial fica em BASE (10), 60 VPOKE BASE{6)+I,RND(1!*256
com 768 posições. O computador mul- No modo gráfico de baixa resolução, 70 NEXT
tiplica por 8 o número ali colocado por a tabela de nomes tem endereço inicial 60 GOTO 50
VPOKE. Em seguida usa o resultado guardado em BASE (15). O número co-
dessa operação para obter o padrão e as locado em uma das 768 posições desta
cores daquela posição. O padrão dos tabela é multiplicado por 8, para que ob-
pontos é armazenado em outra-parte da tenhamos a posição da tabela de cores
memória de video, cujo endereço inicial em que estão armazenadas as cores da A organização da memória de vídeo
estáem BASE (12). Outra posição de posição. A tabela de cores tem endere- do MSX é complicada. Nossa intenção
memória é reservada para as cores dos ço inicial em BASE (17). Não há tabela foi motivá-lo a conhecer melhor seu
pontos e seu inicio está em BASE (11). de padrões. Mude as seguintes linhas no computador; em outra oportunidade,
Para entender melhor o processo, digi- programa anterior, para compreender você poderá compreender com mais cla-
o seguinte programa:
| te melhor o processo: reza a organização desta memória.
IIIIIIIIIMHH llllllllll
Os códigos de controle podem ser

usados em um programa para acionar

funções especiais e substituir comandos


em BASIC. Veja seu emprego
TIROU em micros de diferentes linhas.

igual a 4, a mensagem será enviada ao mero 8. Lembre-se de pressionar


Anteriormente, vimos tomo utilizar
sistema operacional, como se fosse uma <CAPS SHIFT> e < SYMBOL
códigos de controle dentro cie um pro-
grama em BASIC, por meio da função frase de comando. SHIFT> primeiro, de cada vez. Veja
quanta memória foi economizada em
CHRS. Esta retorna o caractere corres- como
pondente a um determinado código nu-
uma linha esta:
ECONOMIZE MEMÓRIA
mérico ASCII. Diversos exemplos fo- 10 PRINT PAPER 2; INK 6 "MENU*
:

ram dados para micros da linha TRS-80.


Agora vamos examinar como micros Existem outras maneiras de se colo- As paJavras-chave PAPER e INK e
de outras linhas podem trabalhar com car o código 4 em uma linha PRINT. O os dois pontos e vírgulas ocupam 1 byte
códigos de controle. seguinte expediente economiza memó- de memória cada, enquanto os números
ria, quando muitas linhas PRINT com 2 e 6 ocupam seis. Usando os códigos
CHRS (4) são necessárias ao programa: de controle, a linha ocupará apenas 1
[HE] 90 LET C4S-CHBSÍ4)
byte para o par de teclas SHIFT, mais
I byte para o código de controle. Isto
100 PRINT C43 "CATALOG"
1

Alguns computadores não permitem significa uma economia de seis bytes por
110 PRINT C43:"BUN PROG2"
o acesso a todos os códigos de contro- instrução. Assim, um programa que
le.Os da linha Apple II, por exemplo, Pode-se também pressionar as teclas usasse vários comandos de cor ficaria
ao contrário dos da linha TRS-80, tem < CONTROL > e D simultaneamente, bem menor em tamanho.
poucos usos para a função CHRS com logo depois das primeiras aspas que se Estes comandos precisam ser digita-
esta finalidade. seguem ao comando PRINT, e, em se- dos dentro de aspas para que funcionem
Nos micros da linha Apple, como ve- guida, continuar a digitar normalmen- corretamente. Portanto, no exemplo an-
remos adiante, a entrada dos códigos de te o comando do DOS que se deseja. terior, digite primeiro:
controle é fciia comumente por meio do Este método apresenta um inconve- "
10 PRINT
próprio teclado, pois este dispõe de uma niente: o código de controle 4 (que é in-
tecla < CONTROL > que é pressiona-
, serido por <CRTL> <D>) fica "in- ... e em seguida digite os códigos de con-
da em combinação com outras. visível" na listagem, podendo não ser trole para PAPER 2 e INK 6, confor-
notado posteriormente e nem aparecer me foiexplicado acima, seguidos pelo
COMANDOS DO DOS na listagem da impressora. restante da linha. Não se esqueça das as-
Em geral, o uso da tecla <CON- pas finais.
Emprega-se muito a função CHRS TROL> nos micros Apple dá acesso a Os códigos não ocupam espaço visí-
vel na listagem, mas funcionam imedia-
para acionar comandos do DOS (siste- uma série de funções via teclado.
tamente, produzindo texto colorido não
ma operacional de disquetes), a partir
de programas em BASIC. O código de só na listagem como na tela.
controle que possibilita o uso de um co-
Pode-se utilizar este recurso simples-
mando do DOS em um programa é o 4. Existe uma boa
razão para se usar có- mente para enfatizar determinados tre-
Um comando do DOS em geral só digos de controle nos micros da linha chos de uma listagem de programa na
Spectrum (como o TK-90X): economi- tela. Neste caso, coloque os códigos de
pode ser utilizado de forma direta (sem
de uma linha de progra- zar memória.Os códigos podem ser em- controle fora das aspas, a não ser que
ser precedido
ma). Se quisermos, por exemplo, exa- pregados para substituir as instruções você queira que as cores também apa-
minar a lista de arquivos em um disque- PAPER, INK, BRIGHT e FLASH. São reçam na tela.

te, digitamos o comando direto: digitados ao se pressionar as teclas


<CAPS SHIFT> e < SYMBOL
CATALOC SHIFT> e, em seguida, um número (o
Se usarmos dentro de um programa: que equivale à tecla < CONTROL > de
outros micros). O
número determinará O
procedimento descrito acima apre-
100 CATALOG qual instrução está sendo substituída. senta um inconveniente: os códigos de
Para PAPER, entre simplesmente o controle ficam "invisíveis" na tela e na
... o comando não funcionará quando
número da cor (1 a 7). Por exempio, listagem da impressora, não podendo
o programa for executado. Para que is-
usamos o 2 para a cor vermelha. ser notados posteriormente. Se você qui-
to ocorra, devemos colocar:
Para INK, pressione <CAPS ser mudar alguma cor de frente (INK)
100 PBIHT CHRS(4)+"CATAL0C" SHIFT> com o número da cor. ou de fundo (PAPER) no mesmo pro-
Quando esta linha é executada, o in- Para obter BRIGHT, pressione o nú- grama, precisará apagar a parte inicial
mero 9 e, para desligá-lo, pressione 8. da linha (ou até ela toda, se não souber
terpretador BASIC examina o primei-
Finalmente, para obter FLASH, localizar onde estão os códigos de con-
ro caractere da mensagem a ser trans-
pressione <CAPS SHIFT>, seguido trole) e inserir novos códigos pelo mé- I
mitida para o vídeo, com o comando
PRINT. Se ele tiver o código ASCII do número 9. Para desligá-lo, use o nú- todo acima.
^^^Illlllllll
Para descobrir os mais estranhos
lugares sem sair de casa, basta entrar

no mundo da aventura. Veja aqui como


proceder para dar movimento ao
aventureiro e iniciar as explorações.

Você já digitou o programa conten-


do as descrições dos locais que fazem
parte desta aventura? Então deve estar
ansioso para fazer com que o jogador 15 indica a localização da Para que o computador possa com-
comece a explorá-los, possibilitando-lhe porta de entrada da Cidade Oculta. Se preender e agir corretamente de acordo
deslocar -se de um loca! para outro. Pa- você desejar que o jogador inicie a aven- com as respostas dadas pelo jogador,
ra que isso aconteça, você precisará de- tura em outro local, bastará mudar o va- você deve dar à máquina um conjunto
finir os movimentos possíveis a partir de lor da variável L. Adiante, você verá co- de palavras que ela passe a identificar.
um determinado local; deverá estabele- mo ajustar o valor de L durante o jogo, Neste estágio, o computador precisa
cer critérios que permitam julgar as res- de modo que passe a indicar localização conhecer apenas as quatro direções, o
postas dadas pelo jogador e, finalmen- diferente.Por enquanto, devemos pre- que pode ser feito por meio do cordão
te, determinar os caminhos que podem parar o programa para receber do joga- RS. Esse cordão é carregado com as pa-
ser percorridos. dor informações indicativas do caminho lavras indicativas de direção, colocadas
Apresentaremos, adiante, algumas que pretende seguir. em uma instrução DATA.
rotinas necessárias ao desenvolvimento
do programa de aventuras. Estas roti-
nas serão responsáveis pela correia des-
crição da localização do jogador e pela
apresentação das saídas que lhe serão
permitidas. Você digitará cada opção e
aprenderá a escrever a seção de progra-
ma que movimenta o jogador no mun-
do da aventura, de acordo com a opção
que escolheu.

É fundamental conhecer a localiza-


ção exala do jogador, a qualquer mo-
mento, dentro do jogo. Para isso, o pro-
grama usa uma variável L, que indica
Local. O valor dessa variável muda de
acordo com a localização do jogador,
a cada movimento realizado.
Para começar, você deve informar ao
computador qual a posição do jogador
no início da aventura. A primeira seção
de um programa para fazer isso é dada
em seguida. Carregue a parte do progra-
ma que você já possui, por meio do co-
mando LOAD, e adicione estas novas
linhas:

100 CLS LET DA-0: LET TA-0:


:

LET LA-0
270 REM **POSICAO INICIAL*"
280 LET L-15
290 GOTO 330

270 REM «*POSICAO INICIAL*


1 1

110 REM * "PREPARAÇÃO DAS MATRI


ZES DE RESPOSTAS**
120 DIM RSU9.40): DIM RUS»
130 FOR K-l TO 4: READ RSÍKJ.R
(K) NEXT K
i

150 DATA "NORTE". 1. "SUL", 1,"LE


STE" 1 "OESTE"

. ,

110 REM* «PREPARAR MATRIZES DAS


RESPOSTAS**
120 DIM RS (19) ,R<19)
130 FOR K-l TO A rREAD RS(K).R(K
) NEXT
:

150 DATA NORTE. 1. SUL. 1. LESTE. 1.


OESTE 1

Observe que as matrizes foram di-


mensionadas na linha 120, podendo
agora armazenar todas as respostas que
o jogo requer. Como precisamos, ini-
cialmente, de quatro direcões, apenas os
quatro primeiros elementos das matri-
zes RS e R serão utilizados. A instrução
FOR... NEXT, na linha 130, que lê RS
e R por meio do comando READ, va-
ria, assim, de um a quatro. As direcões
e os valores a ela associados estão colo-
cados na instrução DATA, na linha 50. 1

Essas informações, entretanto, ainda


não podem ser usadas pelo jogador. An-
tes, seránecessário dotar o programa de
uma rotina que indique onde eie está lo-
calizado.

COMO ENCONTRAS 0 LOCAL

Para que o jogador saiba onde se en-


contra, após efetuar cada movimento,
é necessário fomecer-lhe uma descrição
de sua posição. Você já digitou esta des-
IIIIIIIIIIIHt " nOGRAMAÇÁODtJOGOS „ lH||||||||||j
criçâo. Ela está nas linhas de comentá- Nos outros programas, o conjunto
rios,que se iniciam com a palavra REM. contendo os números de linhas está nas
Agora, só nos falta uma rotina que as- instruções colocadas nas linhas 330 a das pelo jogador com as armazenadas
socie o número contido na variável L, 350. Inicia com a localização no co-
1 na variável RS.
que indica a posição, à descrição corres- meço da linha 330 e termina com a lo-
pondente. Neste ponto, os usuários do calização 24 no final da linha 350. APRESENTAÇÃO DAS DlflíCOES
Spectrum devem digitar uma rotina No Spectrum, use o valor de L para
ter acesso a um elemento da matriz cons-
truído pelas instruções apresentadas nas Além da descrição do local onde se
linhas 20 e 30. Note que a matriz está encontra, o jogador lambem precisa co-
superdimensionada em relação à quan- nhecer as saídas disponíveis, O progra-
tidade de locais existentes na aventura. ma deve verificar, pelas variáveis N, E.
20 DIM GUI. 4): POKE 23658,8 Os números excedentes são lodos iguais S, e W, quais são esias saídas. A infor-
30 FOR N-l TO 4: FOR H-l TO
a zero e não lêm nenhuma influência no mação é necessária porque nem sempre
11; READ G(M.N) NEXT M: NEXT
N
:

desenrolar da aventura. O dimensiona- se pode sair em todas as direçôes, estan-

40 DATA 0.0.0,5020,0.0.5050, mento extra foi feito porque a matriz se- do em um determinado local. A próxi-
5080,0,5110,0 rá utilizada em panes do programa que ma seção do programa indica as saídas.
50 DATA 5140.0.0.5180,5210, mais tarde apresentaremos.
5240.5270.5300,0,0,0 Uma observação válida somenie pa-
60 DATA 0.5330.0,5360.0,0,0,0 ra os usuários do Spectrum: o coman-
.0,0.0 do POKE, na linha 20, Taz com que o
70 DATA 1010.1150.1240.1310, computador aceite apenas letras maíús- •APONTAH DIRECOES*
1410,1460,1500.1360,1080,1550
,3110
300 BEM **ACHAR O LOCAL**
310 CLS
330 IP L<11 THEN GOSUB G{L.l)
: GOTO 400
340 IF L<21 THEN GOSUB G{L-10
.2) : GOTO 400
350 IF L<26 THEN GOSUB G(L"20
.3)

V.'J tf L
300 REM *
"ACHAR LOCAL**
310 CLS
330 IF L<11 THEN ON L GOSUB 0.0
,0.5020,0,0.5050.5080.0,5110: GO
TO 400
340 IF L<21 THEN ON L-10 GOSUB
5140.0.0.5180,5210,5240,52 70,53
00.0.0:GOTO 400
350 IF L<26 THEN ON L-20 GOSUB
0,5330.0.5360

Anies de escrever esse tipo de rotina,


verifique se o número correspondente a
cada descrição de localização está cor-
reio. Começando com a localização 1,
faça uma lista dos números de linhas
correspondentes a cada descrição. Se
não houver descrição para uma deter-
minada localização, escreva o número
0. Nesta aventura, já dispomos de des-
crição para a localização de número 4,
mas não para as de número 1, 2 e 3.
De posse do conjunto comendo os
números de linhas correspondentes à
descrição de cada localização, você po-
de começar a escrever a rotina. Em to-
dos os computadores, exceto o Spec-
trum, esta rotina é constituída de uma
sequência de operações que verifica o
valor da variável L e usa o comando
ON... GOSUB. No caso do Spectrum.
[
que não possui este comando, o núme-
; ro das linhas e obtido de uma matriz.
; i "" (

II PROGRAMAÇÃO DS JOGOS U

400 IF DAOl THEN PBINT ' " POD riável for maior do que zero, a direção
E SEGUIR" escolhida éuma direção possív;! ou—
410 IF N>0 THEN PBINT TAB 11; seja, éuma saída. Essa rotina pode ser
"NORTE" utilizada,sem modificações, em qual-
420 IF E>0 THEN
LESTE"
PRINT TAB 11;
as] quer aventura que empregue um setora-
mento desse tipo.
430 IF S>0 THEN PRINT TAB 11 390 REM «-APONTAR DIBECOES""
"SUL" 400 IF L < > 11 OR (LA - 1 AN
440 IF W>0 THEN PRINT TAB 11; D 0B{6) - - 1 THEN PRINT PR :

"OESTE" INT "PODE SEGUIR ";: GOTO 410


GOTO 460 Agora que o jogador conhece as di-
IF N > 0 THEN PBINT TAB
rcçòes possíveis,podemos perguntar-
"NORTE"
IF E > 0 THEN PRINT TA81 Ihe: "PARA ONDE?". A rotina res-
" LESTE"
ponsável por esta pergunta e apresenta-
390 REM *" INDICAR DIRECOES"" PRINT TAB da abaixo.
IF S > 0 THEN
400 IF LOll OR [LA=1 AND 0B(6) "SUL"
--11 THEN PRINT:PRINT"PODE SEGU
IF W > 0 THEN PRINT TAB
IR " ELSE 460
;
"OESTE"
410 IF N>0 THEN PRINT TAB (13)
NORTE" 450 REM "" INSTRUÇÕES""
420 IF E>0 THEN PRINT TAB (13)
: A rotina apresentada simplesmente 460 INPUT INVERSE 1 * PARA OND
;

feri fica os valores das variáveis IN, 5. E, E "; LINE IS


LESTE"
430 IF S>0 THEN FRINT TAB (13)
;
! W que você definiu, baseado em seu 470 GOSUB 3010
SUL" napa de localidades. Se o valor da va- 515 GOTO G{I ,4)
IIIIIIIIIIIHI " PROGRAMACÁOUJOGOS H 1H||||||||||| III

N (VS) ) THEN I - R(K):IS - LEF


TS (VS.lí
3090 NEXT
450 HEM ** INSTRUÇÕES** * INSTRUÇÃO DE CHECAGE 3090 RETURN
460 PRINT INPUT"PÂRA ONDE" IS
: ;

470 GOSUB 3010 A rotina verifica se a variável IS com-


põe-se de duas palavras. Em caso afir-
A resposta dada pelo jogador é arma- mativo, a primeira palavra é chamada
zenada na variável 1$. O programa ve- 3030 VS-LEFTS {IS I~D de VS e a segunda de NS. A variável VS
rificará o tipo de resposta e aluará de 3040 NS=MIDS(IS.I+1)
,

contem um verbo —
como PEGAR,
acordo. 3050 1-0 MATAR, LEVAR —
e todas as pala-

A
próxima linha— linha 470 — des- 3060 FOR K-l TO 19 vras indicativas de direção: NORTE,
via o fluxo do programa para uma sub- 3070 IF INSTR (RS (K) V$) =1 THEN
. SUL, LESTE e OESTE. A variável NS
rotina localizada na linha 3010. Esta
I^R(K) :IS-LEFTS(VS,1) armazena os nomes dos objetos que fa-
3080 NEXT zem parte da aventura.
sub-rotina é responsável pela validação
3090 RETURN Os computadores TRS-Color e MSX
da resposta do jogador.

um
3000 REM "ROTINA DE VERIFICA
usam o comando INSTR, na linha
para verificar se há algum espaço ha res-
posta que foi armazenada em 1$. Este
espaço será indicativo da existência de
3010,

600 REM ««ROTINA INdTR ** . CAO** duas palavras: a que pertence a V'$ e a
610 LET IN-0: IF LEN YS>L£N XS 3010 NS - " FOR Z - 1 TO
: LEN que pertence a NS. No Specirum e no
THEN RETURN (IS) IF MIDS (IS.Z.l) - " "
:
Apple não existe o comando INSTR.
620 FOR K-l TO (LEN XS-LEN YS+ THEN I - Z GOTO 3020 Para substitui-lo, usamos uma pequena
1) 3015 NEXT :I - 0
sub-rotina, colocada nas linhas 600 a
630 IF YS-XSCK TO K+LEN Y$-l) 3020 IF I - 0 THEN VS - IS: GO
650.
THEN LET IN-K: GOTO 650 TO 3050
640 NEXT K 3030 VS - Se um espaço for encontrado, a ins-
650 RET'.;BN 3040 NS - trução na linha 3030 separa 1$ em suas
3000 REM "ROTINA VERIFICAÇÃO** 3050 I - 0 componentes VS e NS. Se não houver es-
3010 LET NS-"": LET XS-IS: LET 3060 FOR K - 1 TO 19 paço, a linha 3020 considera VS iaual a
YS-" ": GOSUB 600: LET I-IN 3070 IF VS • LEFTS (RS (K) 1$.
3020 IF 1-0 THEN LET VS-IS GO :

TO 3050
3030 LET US-IS< TO 1-1)
3040 LET NS-I$(I+1 TO )
3050 LET 1-0
3060 FOR K-l TO 19
3070 IF VS-RSÍK, TO LEN VS) THE
N LET I-H(K): LET IS-VSÍ TO 1)
3080 NEXT K
3090 RETURN
PROGRAMAÇÃO DE JOGOS

nar uma rotina destinada a manipular


1030 IF I$S-"S" AND S>0 THEN L-L
A pane da sub rotina, composta
final
+6:GOTO 310
pelas 3060 a 3080, compara as res-
lintia-s a variável L, indicativa de localização,
1040 IF IS-"0" AND U>0 THEN L-L
postas dadas com o conteúdo da matriz de acordo com o valor assumido pela -l:GOT0 310
RS. Como sabemos, a matriz RS con- variável 1$. Esta rotina é apresentada em 1050 REM «*SE NAO HOUVER LOCAL
tém as palavras indicativas das direçòes seguida: POSSÍVEL NESSA DIREÇÃO**
que podem ser seguidas. Depois você ve- 1060 PRINT :PRINT"DESCULPE - VOC
rá como fazer para expandir o conteú- E NAO PODE SEGUIR POR ESTE CAMI
do da matriz RS. Pela instrução da li- NHO. " :G0TO 330
nha 3070. o programa verifica se há
igualdade entre os conteúdos RS e VS. LÊ Como você está lembrado, o ponto
de partida da aventura foi um mapa
Se houver, a variável I assume o valor T L-L-6 GOTO 310
S-"L" AND E>0 THEN LE com uma largura de seis posições. Mo-
da variável R. O programa reconhecerá 1020 IF
T L-L+l GOTO 310 ver o jogador por essas posições signi-
a igualdade dos conteúdos verificando
1030 IF S-"S" AND S>0 THEN LE fica alterar o valor da variável L por um
se o valor de I é maior que zero. A últi-
T L-L+6 GOTO 310 fator baseado no tamanho do mapa.
ma parte da linha 3070 retira a primei- 1040 IF $-"0" AND W>0 THEN LE Por exemplo, para fazer com que o jo-
ra letra de VS e armazena-a na variável GOTO 310
T L-L-l gador se movimente nas direções Norte
IS. A variável IS será utilizada depois, 1050 BEM •*SE NAO HA LOCAL POSS ou Sul basta adicionar ou subtrair seis
para fazer com que o jogador se mo- IVEL NESSA DIREÇÃO** da variável L. Isso fará com que o jc
vimente. 1060 PRINT "DESCULPE VOCE NAO
'

gador suba ou desça uma linha compli


,

As sub-rotinas apresentadas adap- PODE SEGUIR NESTA DIREÇÃO.":


ia no mapa. De modo semelhante, mo-
tam-se a qualquer aventura, sem neces- GOTO 330
ver o jogador nas direções Leste ou Oes-
sidade de grandes modificações. Apenas de L.
te significa adicionar ou subtrair I

um detalhe pode precisar de alguns ajus-


As instruções das linhas 1010 a 1040
tes: a duração do comando
verificam o conteúdo da variável IS e
FOR...NEXT, na linha 3060. 1000 REM ""ROTINA DE MOVIMENTO" ajustam o valor de L. As saídas possí-
veis são definidas nas linhas que seguem
1010 IF I$="N" AND N>0 THEN L=L
as descrições dos locais.
-6: GOTO 310
Sc não há uma saida na direção que
1020 IF IS-"L" AND E>0 THEN L-L
+l:GOTO 310 o jogador escolheu, a linha 1060 apre-
O passo seguinte consiste em adicio-
senta a "DESCULPE
mensagem: —
VOCÊ NÃO PODE SEGUIR POR ES-
TE CAMINHO."
Dimensionando adequadamente o
mapa, você poderá utilizar essas rotinas
)U ARE IN H em outros programas, bastando alterar
as instruções das linhas 1010 e 1030.
«TRANCE H/ Grave o programa, e aguarde a con-
tinuação da aventura.
7 APLICAÇÕES 7

Se você já dominou o uso das teclas

centrais, é hora de treinar a

datilografia com todo o alfabeto. Para

ALFABETO COMPLETO isso, veja como alterar o

apresentado no artigo anterior.


programa

No artigo da página 249 apresenta- leira QWERTY (é desta fileira que vem 320 LET RN-INT (RND"19)+1
mos a primeira parte de um programa o nome dado aos teclados usados em 330 PRINT AT 10 RN+5 "•" , .
;
: LET
completo para aprender datilografia. computadores). RS-SS(RN)
Tendo já dominado razoavelmente o Carregue o programa antigo e digite 350 PRINT AT 10, RN+5;" "
uso das teclas da fileira do meio — ou as linhas que se seguem conforme o ti-
440 LET RN-INT (RND*19)+1
530 PRINT AT 10.13;"
seja, se você datilografa cerca de 15 pa- po de seu microcomputador. Algumas PRINT AT 10,13;TS
lavras por minuto, sem cometer nenhum delas substituirão linhas previamente
erro — é hora de passar para o segun-
, existentes —que agora se tornaram des- 540 FOR M-l TO LEN TS: PRINT
do estágio. necessárias — ao passo que outras são
,
AT 9,11+H;" *
610 FOR N-l TO 4: R ESTORE :
totalmente novas.
LET RN-INT (RND*24)+1: FOR K-l
TO RN: READ XS: NEXT K
1010 PRINT AT 12,6;SS
2000 DATA "QUEDA" "TIRO" "TROLE , .

Acrescentando as linhas que se se- 30 LET S$-"QAWSEDRFTGYHUJIKOL ",


"POLE" "GRALHA" "RISO" "PORTA
, , .

guem ao programa do artigo anterior, "


,
"PATRULHA" "URSO" "PILHA" "RU
. ,

você poderá treinar também as teclas da A" "ILHA"


.

fileira de cima do teclado: a chamada fi- 2010 DATA "TULIPA", "PIOLHO", "IO

L P
7 APLICAÇÕES 7

COMO ACRESCENTAR AS COMO MUDAR


TECLAS DAS FILEIRAS SUPERIOR AS PALAVRAS PARA
E INFERIOR AO PROGRAMA TREINAMENTO
POSIÇÃO DOS DEDOS NAS PRATIQUE COM
TECLAS DE OUTRAS FILEIRAS [
TODO O ALFABETO

DO" "PIADA" "JAULA" " FLORESTA"


. . .
9000 DATA QUARTO. LADO. FATOS. SER
"OLHO" "PODER" "RATO" "TROPA"
, . , 1

IA GALHO JATO HARPA. LOTER IA POR


. , .

"QAWSEDRFTGY
, .

PISTOLA". "QUADRA" TA. QUILHA. SADIO RALA ORLA. ATILA . ,


10 OBS -
9010 DATA EDITAR. TALHER, DIRETO. HUJIKOLP;"
U ULISSES ILHA FOGO JULGAR ASSADO
,

JOLO
.

DERROTA HULHA GASODUTO LATA TI


,
,

.
.

,
.

.
210 AP -
220
2:
FOR

320 AP
GOSUB 1100: NEXT
- 1 + INT
-
K-l TO 20:AP - AP +
RND U) - 2
1

10 OBS-"QAWSEDRFTGYHUJIKOLP"
(

0) • 2
210 AP-1253
420 FOR K - 1 TO 20: PS - MIDS
220 FOR K-l TO 19 INT RND (1) * 20) * 2
(OBS. (
230 AP-AP+1
10 ObS-"QAWSEDRFTGYHUJIKOLPÇ" + 1,1)
320 AP-1253+RNDU9)
S-CHRS<219> :SS-"L1Q 02 G" 610 FOR K - 1 TO 5 PS - PS + W
430 PS-MIDS(0BS.RNDU9) ,1)
:

600 CLS:PS""" :FOR K-I TO 4 210 AP-358 Sí INT { RND (1) " 26) + 1)

9000 DATA QUARTO LADO FATOS . ,

SER IA. GALHO JATO HARPA. LOTERIA . .

PORTA QUILHA SADIO RALA ORLA AT


,
, . . ,

220 FOR K-l TO 20 ILA


230 AP-AP+1 9010 DATA EDITAR, TALHER, DIRE
320 AP-359+INT(RND(l>*20) TO .ULISSES ILHA FOGO JULGAR JUL , , , ,

430 PS-MIDS(OBS.INT(RND{1)*20)+ HO ASSADO DERROTA HULHA. GASODUT


, . ,

1.1) O LACO TIJOLO


, .

810 FOR K-l TO 4:PS-PS+WS(INT(R I

ND(1)*28)+1)+CHRS(32) NEXT :
Quando o programa for executado,
9000 DATA QUARTO LADO FATOS SER . , .
a tela exibirá o menu usual, com cinco
IA GALHO JATO HARPA LOTERIA POR
, . , , ,
opções. O
nível 1 exibe a sequência de
TA, QUILHA, SADIO, RAÇA. ORLA, ATIÇA letras QAWSEDRFTGYHUJIKOLP.
R Dependendo de seu computador, o te-
9010 DATA EDITAR. TALHER, DIRETO, um
clado também incluirá caractere fi-
ULISSES ILHA, FOGO JULGAR, JULHO
. ,

nal: ou Ç. Da mesma forma que o pro-


ASSADO DERROTA HULHA GASODUTO
, . , ,
;

AÇO .TIJOLO grama anterior, um asterisco imediata-


".
, .,,
.

7 APLICAÇÕES 7

mente abaixo das letras na tela funcio- nor juntamente com as da fileira cen- 320 AP-1253+RNDU6)
como um de prontidão, ca- comece a usar as teclas da fileira
tral, 430 P$-MIDS(0BS.RND(16) .1)
nará sinal
X, C, V, B, etc.) 800 CLS:PS-"":FOR K-l TO S
minhando da esquerda para a direita. inferior (Z,
9000 DATA FACA, LAVA, LAMA. BALANC
Os níveis 2 e 3 funcionam exatamen- Nesta parte do curso, você ainda não
0 VAGA NASA JACA SAMBA MACA AVA
, , . . . ,

te como o primeiro, levando você a di- trabalhará com as três fileiras. Antes NCA VANDA AJAX CHAMADA VALHALA,
, , , ,

gitar os caracteres aleatoriamente, mas disso,aprenderá a utilizar as teclas das CALHA CANSADA,

com uma série muito maior de leiras. fileiras central e inferior do teclado, si-
9010 DATA LAMBADA BANANA GAMBA . ,

Os níveis 4 e 5 são mais difíceis do multaneamente, com exercícios em cin- BANDA CANA ABAFA CANAL HA MASSA
, , . .

que os anteriores, porque envolvem a di- co níveis de dificuldade. ZAGA MANHA CASCA SALVA
. , ,

gitação de palavras mais extensas, for- Eis aqui as alterações que deverá efe-
madas por letras das duas diferentes fi- tuar:
leiras. nu
Para começar a usar o programa, 10 OBS-"AZSXDCFVGBHNJMK.L.Ç":ZS
sente-se diante do teclado e posicione os -CHRS(219> :SS-"L10 02 G"
dedos corretamente na fileira do meio. 30 LET SS-"AZSXDCFVGBHNJMKL" 220 FOR K-l TO 19
Tente digitar as teclas da linha superior 210 FOR K-6 TO 21 320 AP-359+INT(RND(l)*19)
movimentando apenas o dedo que for 320 LET RN-INT <RND*16)+1 430 P$-MIDS<0B$,INT(RND<1>*19)+
necessário para cada uma e não Ioda a 440 LET RN-INT (RND*16)+1 1 ,1)
9000 DATA FACA. LAVA. LAMAÇAL, BAL
ANCA VAGA NASA JACA SAMBA MACA
. . . . .

AVANÇA VANDA AJAX CHAMADA VALHA


, , , .

LA, CALHA, CANSADA


9010 DATA LAMBADA BANANA GAMBA . ,

BANDA CANA ABAFA CANALHA MASSA


, , . .

ZAGA MANHA CAÇA BAÇA


, , .

D| CIT
E
#
JftCft

mão (veja a ilustração). Utilize o dedo


mínimo da mão esquerda para acionar
o Q ou o A, o dedo anular para o S e 610 FOR N-l TO 5: RESTORE :

o W, e assim por diante, até o dedo mí- LET RN-INT ÍRND*24)+1; FOR K-l
nimo da mão direita, que deve ser usa- TO RN: READ XS NEXT K :

do para acionar a tecla P. Os dedos in- 1010 PRINT AT 12.6;"SS"


dicadores trabalharão mais que todos — 2000 DATA "CASA", "FACA". "VAZA"
"LAVA" "MACA" "VACA" "BABACA"
, , , .

o indicador esquerdo será utilizado pa- , , ,


JACA" "JAZZ" "BANDA" "BALA" "CA
,

ra o F, G, R e T, enquanto o indicador
direito se encarregará das letras H, J, Y
LCA" 10 0B$ - "A Z í XDCFVGBH
2010 DATA "SALVA". "CALA". "AMA", N J M K L |* , .

e V. Depois de ter pressionado uma te- " FALA" "DA" "AFAGA" "ALCANÇA*
. , . .

220 FOR K - 1 TO 19: AP - AP


cla da fileira superior, volte com o de- MANHA" "CANA" "LAZANHA" "SAGA"
. . ,

2: GOSUB 1100: NEXT


do à posição inicial, na tecla de apoio. "CHAMA" 320 AP - 1 + INT ( RND (1)
9} * 2

Quando estiver digitando com preci-


u
são e rapidez as teclas da fileira supe-
7 APLICAÇÕES 7

VANCA VANDA AJAX CHAMADA UALHAL


, . . .
clado, com os dedos posicionados cor- de pontuação situadas na fileira infe-
A, CALHA. CANSADA retamente. Agora você movimentará rior, em posições que variam de tecla-
90 10 DATA LAMBADA BANANA BAN , .
seus dedos para baixo, para a fileira in- do para teclado. No Spectrum, elas não
DA CANA .ABAFA CANALHA MASSA ZAG
.
, . .
ferior, antes de retornar às teclas de estão disponíveis sem o < SYMBOL
A MANHA CALA BALA. GAMBA
. , ,
apoio. O dedo mínimo da mão esquer- SHIFT > ,
cujo emprego será explicado
Com esse programa, você também da irá pressionar o A e o Z, o anular o futuramente.
fará exercícios em cinco níveis de difi- S e o X e assim por diante. O dedo indi- Observe que essas teclas não estão in-
culdade, mas com palavras que utilizam cador da mão esquerda será utilizado cluídas nos testes de palavras— você de-
do para as letras F, G, V e B, e o indicador verá praticar a pontuação com um pro-
as leiras das fileiras centra! e inferior
teclado. da mão direita para H, J, N e M. Os de- grama adicional, que apresentaremos
Mais uma vez, sente-se diante do te- dos restantes deverão operar as teclas em artigo posterior.
U
A
C"
, A
U
.

UIIIIIIIIMHHi / apuoçOb 7 illllllli j

O ALFABETO COMPLETO 430 PS-MIDS(OB$.INT(RND(l)*29)+


1.1)
1010 LOCATE 0,12:PRINTOBS
Depois de dominar o uso conjunto 9000 DATA MARIA, MULHER. JEITO, CH
das teclas das fileiras superior e inferior EGAR QUENTE COSTUME CANÇÃO BONI . . ,
,

do teclado, você estará apto a ingressar TA DECOTE CONVERSA. ÚTERO JAPSO


, . .

no estágio seguinte do curso. Afinal, vo- CORRIDA, AZUL


cê poderá praticar a datilografia utilizan- 9010 DATA BANDEIRA, AVIÃO, VAZIO,
do todo o alfabeto. Apenas as teclas de ABERTO HÁLITO XAXADO ALCALINO
. . , .

números e de pontuação permanecerão NIDOS PRESSA, QUERIDA GUARDIÃO


, , ,

temporariamente excluídas do treino. BOBORA NAVIO REMORSO . .

Eis aqui as alterações que deverá efe-


Como acentuar textos em portu-
tuar no programa: guês em um microcomputador?
Depende muito da linha ou da mar-
ca do micro. O problema não toi tecni-
10 OBS - "QAZWSXEDCRFVTGBYHNUJM
camente resolvido de maneira unifor-
IK.OL.P;" me pelos fabricantes nacionais, pois
SS-"QAZWSXEDCRFVTGBYHN
30 LET 210 AP - 0 durante muito tempo não houve um pa-
UJMIK0LP' 220 FOR K - 1 TO 29:AP - AP + drão industrial obrigatório. Entre os
40 FOR K-2 TO 27 1: COSUB 1100: NEXT computadores pessoais cobertos por
230 LET RS-SS(K-l) 320 AP - 1 + INT RND 11) * 2 {
INPUT, apenas os micros da linha MSX
320 LET RN-INT (RND"26)+1 9) seguem o padrão aluai de representa-
330 PRINT AT 1Q.RN+1;""": LET 420 ção dos sinais característicos da língua
RS-SS(RN) to portuguesa — o chamado BRASCIl.
350 PRINT AT 10.HN+1;" " 1) que é a extensão brasileira do código
440 LET RN-INT (RND*26>+1 9000 DATA MARIA. MULHEH. JEITO. ASCII.
530 PRINT AT 10,13:" CHEGAR QUENTE COSTUME CANCAO BO
. , . ,
O BRASCIl, além de definir os códi-
": PRINT AT 10,13;TS NITA DECOTE CONVERSA ÚTERO JAPA
. , , .
gos numéricos para as letras acentua-
540 FOR H-l TO LEN T$ PRINT :
O. CORRIDA. AZUL das iá, à, Á, Á, ó, etc), determina ain-
AT 9,11+M:" 9010 DATA BANDEIRA. AVIÃO, VAZI da a localização padronizada da cedi-
610 FOR N-l TO 5: RESTORE : O ABERTO HÁLITO XAXADO ALCALINO
, , , ,
lha e dos acentos grave, agudo, til e cir-
LET RN-INT (RND*24)+1: FOR K-l .UNIDOS PRESSA, QUERIDA GUARDIÃO, .
cunflexo, no teclado do microcompu-
TO RN: READ XS NEXT K : .ABÓBORA, NAVIO REMORSO .
tador. Portanto, a maneira de usá-los,
1010 PRINT AT 12,2:SS na datilografia, é idêntica à de uma má-
2000 DATA "QUIETO" "LONGE" "ASI , .
Como
acontece com todos os progra- quina de escrever. Da mesma forma, o
LO" "MENTE" "LOCAL" "TRADIÇÃO"
, , ,
mas deste curso, assim que você estiver comportamento do teclado e do vídeo,
"RESPOSTA" "ATRAVÉS" "DRIBLE" familiarizado com as palavras constan-
, , ,
durante a datilografia das letras acen-
RETORNO" "DESPEDIDA" "ESCRITA"
, ,

tes nas declarações DATA, poderá tro- tuadas, deve ser igual: por exemplo, ao
2010 DATA " ESCOLA" "INFERNO" "P , ,

cá-las por novas palavras. Quase sem- se pressionar a tecla com o til, este si-
ROFESSOR" "CHATO" "TELEVISÃO"
, , ,

pre, os programas para outras máqui- nal aparece no vfdeo, e o cursor fica pa-
,
BURRA" "ESPORTE" "BOM" "COMPUTA , ,
rado no mesmo lugar; ao se pressionar
nas incluem palavras diferentes. Se qui-
DOR" "MELHOR" " INPUT" "PERFEITO
, . ,
a letra a, ela aparece imediatamente
ser, aproveíte-as em seu computador,
abaixo do acento.
mas verifique se não está utilizando um Os micros de outras linhas (Apple II,
número de palavras menor que o do TRS-80, TRS-Color e Sinclair), por se-
programa original. Caso isso ocorra, vo- rem copiados de modelos norte-ame-
10 OB$-"QAZWSXEDCRFVTGBYHNUJMtK cê obterá uma mensagem de erro OUT ricanos e ingleses, dão ao problema
OLP" OF DATA, E, se colocar mais palavras respostas diferentes. As soluções ado-
210 AP-1248 do que as existentes, elas não serão li- tadas variam de um teclado inteiramen-
das pelo computador, a menos que vo- te compatível com o de uma máquina
220 FOR K-l TO 26
de escrever [por exemplo, o Microen-
320 AP-1248+RND(26) cê modifique o programa.
genho II, da Spectrum, que pertence à
430 PS-M1DS (OB$,RND(26) ,1) Siga as cinco lições, como nos está-
linha Apple), até a impossibilidade to-
800 CLS:PS""":F0R K-l TO 4 gios anteriores. Lembre-se sempre de co-
1020 PRINT 6257, OB3 tal de acentuação (micros compatíveis
locar os dedos de volta nas posições cor- com as linhas Sinclair ZX-81 e TRS-
9000 DATA MARIA, MULHER, JEITO, CH retas de apoio, na fileira do meio, toda Color).
EGAR QUENTE COSTUME LOCAL BONIT
vez que pressionar uma tecla das carrei-
, , , .
Alguns micros brasileiros da linha
A, DECOTE CONVERSA ÚTERO JAPÃO
, , . ,

ras inferior ou superior. Apple adotaram o padrão do chamado


ORRIDA.AZUL teclado inteligente, ou teclado profis-
9010 DATA BANDEIRA. AVIÃO, VAZIO, sional, em que certas teclas são usa-
ABERTO HÁLITO XAXADO ALCALINO
. . , ,
das para digitar a letra já acentuada,
NIDOS PRESSA, QUERIDA GUARDIÃO
,

BOBORA NAVIO REMORSO


,
, .
com uma única pressão, A localização
.
destas teclas não coincide, evidente-
Na medida em que o curso for progre- mente, com a de uma máquina de es-
dindo, você terá a oportunidade de se crever, e seu acionamento depende da
aperfeiçoar cada vez mais, adquirindo pressão simultânea de uma ou mais te-
velocidade e precisão na datilografia clas adicionais de controle. Este proce-
com todas as letras do alfabeto. Em se- dimento dificulta a datilografia, pois di-
guida, começará a praticar com as teclas fere muito da maneire natural de se
210 AP-353 de números e de pontuação essenciais — usar uma máquina de escrever e com-
. 220 FOR K-l TO 29 para a digitação das listagens de pro- promete bastante a velocidade da di-
320 AP-353+INT(RNDU)*29) gitação.
gramas.
8 APLICAÇÕES B

ACRESCENTE NÚMEROS
A TECLA <SHIFT>
DESENVOLVA UM RITMO
REGULAR
VELOCIDADE E PRECISÃO

Divirta se com um joguinho de ação 440 LET RN-INT (RND*19)+1


530 PRINT AT 10, 13;"
rápida e aprenda ao mesmo " : PRINT AT 10, 13:Tfi
540 FOB M-l TO LEN TS PRINT
tempo a trabalhar com as teclas de *
:

AT 9,11+M;"
números, ampliando a sua 610 FOR N-l TO 5: RESTOHE :
10 0BS-"1A2S3D4F5G6H7J8K9LQÇ--"
LET RN-INT £RND*24>+1: FOB K-l :ZS-CHR$(219) :SS-"L10 02 G"
habilidade como datilógrafo.
TO RN: READ XS: NEXT K 21D AP-355
1010 PRINT AT 12.6;S$ 220 FOB K-l TO 22
2000 DATA "MC6809E" "VALOR" "UL , ,

320 AP-356+INT(RND(l)*22)
Depois de ter estudado as duas pri- TIMO" "ZB0A" "RELAXE" "6502" "A
. , . .

430 PS-MIDS(OBS,INT[RNDU)*22) +
meiras lições de dati logra ia, você já está 37X2" "1024" "VASTO" "JUNCO" "R
. . . .
l
1.1)
provavelmente familiarizado com as te- ETORNO" " 6 7 V DG ,

1010 LOCATE 2,12:PRINTOBS


clas de letras e com os sinais de pontua- 2010 DATA "APENAS" "AGITADO" "7 . ,

9000 DATA MC6B09E. VALOR. "ULTIMO


ção das três fileiras inferiores do tecla- 4LS83" "REDONDO" "LINEAR" "1986
, . ,

:
" ,Z80A, RELAXE. 6502. A37XZ. -1024
" "30123" "CONGELADO" "4MHZ" "W
. , . ,

VASTO, JUNCO
do. Até agora, porém, não tocamos nas .

X101" "64MB" "VÍDEO" . .

9010 DATA RETURN, A847VDG 145 22


importantes teclas numéricas (muito . .

usadas, aliás, na digitação de pro-


gramas.)
Da mesma forma, ainda não ensina-
D
10 OB$-"lA2S3D4F5G6H7JBK9L0:-;"
,
"SOMENTE.". AGITAR, 74LS83. -93.
1 CIRCULO LINEAB
, ,

9020 DATA PBOCESSO. FBIO, TRAZ. 19


86, DESENHO, SANGUE, 842 52 CAÇA. . ,

mos as formas de manipulação das te- 50KG


210 AP-1252
clas para se obter letras maiúsculas ou
220 FOR K-l TO 22
minúsculas, nem explicamos os sinais de
320 AP-1252+RND(22)
Quando o programa for rodado, um
pontuação adicionais e demais símbolos 430 PS-MIDS (0BS.RND(22) 1) ,
menu contendo os cinco níveis já conhe-
disponíveis no teclado. 1020 PRINT @261.0BS cidos será apresentado na tela: você de-
Esta lição será dedicada às teclas ain- 9000 DATA MC6809E, VALOR, "ULTIMO verá então optar por um deles. Como
da não estudadas. Nela. apresentaremos :
" .Z80A. RELAXE. 6502, A37XZ, -1024 das vezes anteriores, existirão muitas
também um pequeno e divertido exer- ,VASTO JUNCO .
combinações possíveis, dependendo do
cício, que fará com que você melhore a 9010 DATA RETURN.A847UDG.145.22
sua velocidade, precisão e ritmo no tra-
.
"APENAS." .AGITADO. 74LS83. -93.
1 REDONDO LINEAR
balho com o teclado.
, ,

9020 DATA PROCESSO CONGELADO TR . .

A2 1986 DESENHO SANGUE 842 52


, . , . .
.

ACRESCENTANDO OS NÚMEROS 301.123-.350KG

Para treinarmos a datilografia com


a fileira do teclado que contém os alga-
10 OBS - "1A2S3D4F5O6H7J8K9L0;
rismos, basta fazer algumas modifica-
ções no programa apresentado nas lições
210 AP - 8
anteriores do curso (páginas 253 e 276). 220 FOR K - 1 TO 22:AP - AP +
Desta forma, carregue o último pro- 1: COSUB 1100: NEXT
grama utilizado e digite as linhas adicio- 320 AP - 9 + INT ( RN D tl) - 2
nais, expostas a seguir. Comovocê ve-
rá,algumas delas irão apenas substituir
linhas já existentes, ao passo que outras
serão adicionadas ao programa: 1)
640 P - 1: VTAB 11: HTAB 2: PRI
NT PS
660 VTAB 15: HTAB P + 1: PRINT
MID3 (PS.P.l)
1010 VTAB 12: HTAB 9: PBINT OB
30 LET SS-"1A2S3D4F5C6H7J8K9L S
0" 9000 DATA MC6809E, VALOR, "ULTI
210 F0B K-6 TO 24 MO:",Z80A.RELAXE,6502.A37XZ,-10
230 LET RO-SStK-5) 24, VASTO. JUNCO
320 LET RN-INT (RND"19) 1 9010 DATA BETURN,AB47VDG.145.
330 PRINT AT 10 RN+5 "«* LET
,
;
: 22 "APENAS " AGITADO 74LS83 -93
, ,
, ,
.

RS-SS(RN) .41, REDONDO, LINEAR


350 PBINT AT 10, RN+5;" " 9020 DATA PBOCESSO, CONGELADO
" S,
.

8 APLICAÇÕES 8

ja-f lor" "Lugar" "4*4-16" "fiuen


, , ,

número de teclas a serem incluídas nos


AS LETRAS MAIÚSCULAS ?" "6: lOpm" "Noa" "S15. 40" "Dir
. . , .

exercícios. Nos níveis mais baixos de di-


igir" "ATENÇÃO" "100/4"
. ,

ficuldade, o computador proporá exer-


cícios em que as teclas numéricas e, al-
gumas vezes, de pontuação serão com-
binadas aleatoriamente com as outras
A tecla <SHIFT> corresponde à
alavanca de maiúsculas de uma máqui-
na de escrever comum. Em alguns com-
putadores, essa função também pode ser
U
10 0B$-"!A"+CHR$(34) + "S#D$FIG1.H
teclas,que você já conhece das duas pri-
meiras lições. Essa combinação dificul- desempenhada pela <CAPS LOCK>. 'J(K)L*-+"
tará as coisas para você, e o obrigará a Para aprender a usá-las, adicione as li- 20 POKE 282,0:CLS
nhas abaixo à última versão do progra- 210 AP-1250
não se concentrar apenas nas teclas nu-
220 FOR K-l TO 21
méricas. ma (novamente, algumas linhas serão 320 AP-1250+RND<21)
Nos níveis mais altos de dificuldade, inteiramente substituídas):
430 PS-HIDS(OB$.RND<21) ,1)
o computador pedirá que você digite 999 POKE 282.255:CLS:END
uma mistura de palavras, grupos de nú- 1020 PRINT «259, OB3
meros e combinações de letras e algaris- 9000 DATA PRINTt. Mostre, S.H4000,
mos. As paiavras e números seleciona- 20 POKE 23658,0: LET ER-Q Fora! (abaixo) H+9-1D S500 10
! , , . .

dos sa encontram nas declarações DA- 30 LET SS-"A!aSesDídFSfCtgHa.h D/100t.Eles.**obs**


J')K<1(L]I0" 9010 DATA Extra, Carga. DIÁRIO. Co
TA, quase no final do programa. Eles
210 FOR K-2 TO 29 nta. Mes. Resposta. Ho je, Gerente.
podem ser trocados, caso você queira 230 LET RS-SSÍK-l) etor
aumentar o desafio depois de se fami- 320 LET RN-INT (RND*28)+1 9020 DATA LONDRES Concha Toque , ,

liarizar bem comos exercícios originais. 330 PRINT AT 10 RN*1 "*" .LET;
: ;
- ;-; Sucesso Bei ja- flor Lusar
; , , .

Entretanto, lembre-se de manter o mes- RS-SS(RN) ,Campo Di r et o


,

"
mo número de palavras (ou grupo de ca- 350 PRINT AT ÍO.GN+I;"
racteres); do contrário, ocorrerá um er- 440 LET RN-INT [RND*28>+1
ro de execução quando o programa não 610 FOR N-l TO 4: RESTORE :

encontrar o número correio de itens em LET RN-INT (RND*24) +1 FOR K-l :


10 OBS - " !A" + CHRS (34) +
TO RN: READ XS NEXT K ID3FIG&.H' J(K)L + *-<>7"
DATA :

Umavez dominadas as Teclas numé-


1010 PRINT AT 12.2;SS
2000 DATA 50-, "PRINT*". "í.
220 FOR K-l
TO 24:AP - AP
-S235. 1: GOSUB 1100: NEXT
ricas, passe para a lição seguinte, cujo H1200".-23.St" "Conta" "LONDRES
, ,

320 AP - 9 * INT RN D (1)


objetivo é praticar com os caracteres
(
" ."Eles" ."158112"." (abaixo) ". "H
5)
acessíveis ape nas por intermédio da te- +9-1D" ,"**0b3**" "Fogo ,
I
!

<SHIFT>. 2010 DATA ";-;;-;", "Extra" "Bei


,
cia
FS
, :

8 APLICAÇÕES 8

cia <CAPS> está desaiivada. datilografia consiste em pressionar as te-


Os de
níveis mais baixos dificuldade clas ao compasso de um metrõnomo
ti do programa apresentam agora os ca- (instrumento que serve para regular os
9000 DATA PR| .Mostre. 3H4000 ,

racteres que só estão disponíveis quan- andamentos musicais). Este deve ser
ora! !. (abaixo) .H + 9 - lD.CzS 5 do as teclas são pressionadas simulta- acelerado á medida que o movimento de
00. 10. D/100 t. Eles. «*Obs*«
neamente com o comando < SHIFT > seus dedos se tornar mais rápido e
9010 DATA Extra. Carga, Di ar lo.
Conta, Hea, Hoje. Resposta. Gerente pontuação, símbolos matemáticos, etc... preciso.
Eles estão misturados com as letras da Mas por que dar-se ao trabalho de
9020 DATA LONDRES Concha Toqu
, , fileira central do teclado, o que signifi- utilizar um metrõnomo, quando o seu
e, :-; ;-: Sucesso Bei ja-flor Lug
. . , ca que você deve retornar a eles toda vez computador possui um relógio embuti-
ar .Campo. Direto que pressioná-los. do? O próximo programa ê um novo e
Nos níveis mais altos são apresenta- completo exercício de digitação, plane-
dos palavras e grupos de caracteres de jado como um jogo, onde a contagem
uma lista interna, tal como antes; ago- depende do seu desempenho no teclado.
10 0B$-"!AeS|D$FtG-+CHRS<34)+"H ra, porém,você encontrará as letras Ele é composto por duas partes. A pri-
U*K(L)Ç_+?>-:ZS-CHRS (219) :SS-" meira, exibe uma linha de caracteres se-
maiúsculas e outros símbolos que só po-
LIO 02 G"
220 FOR K-l TO 24 dem ser obtidos com o < SHIFT > mis- , lecionada aleatoriamente —
você tem
320 AP-3S6+INT(RND(1)*24) turados com as letras minúsculas. que digitar, em sequência, os caracteres
430 PS-MIDS(OBS.INT(RND(l)*24)+ Conhecidos esses exemplos particu- à medida que forem aparecendo. A se-
1.1) laresde teste, substitua as declarações gunda parte é mais difícil —
agora, os
9000 DATA PRINTI. Mostra. 1.H4000. DATA por um novo conjunto de dados caracteres são lançados aleatoriamente
Fora! !. (abaixo) .H + 9 - lD.CzS (lembre-se de manter o mesmo número na tela, um por um; deste modo, você
500.10.D/100í,Eles."* 0b9 ** total de palavras). não tem idéía do que virá a seguir.
9010 DATA Extra. Cargo, DIÁRIO, Co Passe para a próxima seção apenas
nta Mia, Resposta. Hoje. Gerente
,
,

9020 DATA LONDRES Concha Toque


, ,

;?;?, Sucesso, Bel ja-f lor Lugar .C


.
0ICITE AS PALAURAS
upOtGula

lC
lCAD*

««to/C,

- = "Vir I.
Antes de iniciar o teste, selecione o
seu próprio nivel de dificuldade. Isso de-
ve ser feito dizendo-se ao computador
com que velocidade você quer que as le-
tras sejam exibidas — em outras pala-
vras, quantos caracteres por minuto vo-
cê quer digitar. Então, o computador es-
tabelecerá um tempo limitado, dentro
do qual você deve digitar cada caracte-
re; do contrário, será emitida uma con-

O
TRS-Color não imprime letras mi-
»7 tagem de erros. No primeiro nível, isso
por intermédio de um indicador
é feito
núsculas na tela.Em vez disso, exibe-as móvel que mostra qual letra deveria es-
em vídeo inverso (letras claras sobre tar sendo digitada; no segundo nivel, o
fundo escuro). quando estiver encontrando —
sem he- caractere é iluminado por algum tempo.
Nos micros da linha Apple que dis- sitação e sem olhar para o teclado to- — Ao começar o primeiro teste, você
põem de minúsculas, mude a tecla sele- dos os caracteres com que treinou. pode escolher se quer o teclado normal
tora para minúsculas ao digitar as linhas (com letras, apenas) ou teclado comple-
DATA. Infelizmente, os micros da linha to (com todos os símbolos). E antes de
JOGO DE VELOCIDADE
Apple 11+ padrão, que não contam passar para o segundo nivel (o teste dos
com letras minúsculas, não conseguirão caracteres) você deve decidir quanto
rodar o programa a seguir. Nos micros Um dos modos mais eficazes de se O
tempo é capaz de sustentá-lo. compu-
da Unha MSX, certifique-se de que a te- melhorar a precisão e a velocidade de tador perguntará quantos caracteres, no
Illlllllll 8 APLICAÇÕES 8 Illl
total, você quer que Façam parle do 80 LET iS-INKEYS: IF Í$-"2" GOTO 300
teste. THEN GOTO 400 250 LET iS-INKEYS: IF iS-""
Imediatamente depois de ter exibido 90 IF 1S<>"1" THEN GOTO 70 THEN GOTO 240
todos os caracteres, o computador pa-
100 CLS : INPUT "Quantos carac 260 IF i$-3$(r) THEN PRINT AT
tereg por minuto? " ;cpm 12. r;"~": GOTO 280
rará e fornecerá uma contagem basea- 270 LET er-er+1
110 LET t-3000/cpra
da nos seus erros. 120 LET aS-"" 280 IF PEEK 23672+256-PEEK
Não é apenas a velocidade total de di- 130 FOR n-1 TO 30 23673<t THEN GOTO 280
gitação no computador que conta nesse 140 LET sS-aS+aS(INT <RND*84)+ 300 NEXT r
teste de desafio: você precisará também 1) 310 PRINT AT 16,3;-V0CE ERROU
desenvolver um ritmo constante. Para 150 NEXT n ";er;" DAS 30"
ajudá-lo a adquirir esse ritmo, o com- 160 PRINT BRIGHT 1 ; AT ll.l;s$ 320 FOR f-1 TO 200: NEXT f
putador dará um sinal sonoro assim co- 200 GOSUB 800: LET er-0 FOR r
: 330 GOTO 20
-1 TO 30 400 CLS INPUT "Numero de tec
mo um sinal visual de prontidão para ca-
210 POKE 23672,0: POKE 23673,0
:

las por minuto? " ;cpm


da letra.
220 PRINT AT 10,r-lí" «" 410 INPUT "Numero de. caractere
Agora digite o programa propria- 230 SOUND .02.20
mente dito, e leste a sua habilidade co- 240 IF PEEK 23672+256*PEEK 420 INPUT "(N)ormal ou (E)aten
mo datilógrafo: 23673>-t THEN LET er-er + 1 : dido? "; LINE io$
430 IF mS-"N" OR mS-"n" THEN
LET a$-a$< TO 52}: GOTO 450
440 IF mSO"E" AND m$<>"e"
10 BORDER 7: PAPER 7: INK 0: THEN GOTO 420
CLS 450 LET t-3000/cpm
20 LET aS""ABCDEFGHI JKLMNOPQR
STUVWXYZ"
30 LET a$-aS+"abcdefghi jkl

40 LET aS-aS+"1234567890!6ISt

50 LET- aS-aS*CHRS (34)+"<>;-+

60 PRINT INVERSE 1 AT 6,7;" ;

TESTE 1 OU 2 ? "
70 IF INKEY5-"" THEN GOTO 70
IIIIIIIIIIHHUBBHHHHHHIIIIIIIII!
460 GOSUB 800 30 PR1NT §10 2, "DIGITE (0) PARA 430 TIMER-0
470 LET er-0 SAIR" 440 AS-INKEY$:IF AS-"" THEN 460
480 FOR n-1 TO r 40 A$=INKEYS:IF A$C"0" OR A5>"2 450 BS-AS:IF BS-WS THEN SCREEN
490 POKE 23672.0: POKE 23673,0 " THEN 40 0,1
500 LET rS-aS(INT (BND-LEN aS) 50 ON VAL (AS)+1 GOSUB 1000,600 460 IF TIMERCTM THEN 440
+1» ,200 470 SOUND 150,1
510 PBINT INVEBSE 1;AT 10,15; 60 POKE 262.255 480 IF BSOWS THEN ER-ER + 1 GOTO :

"
rS; INVERSE 0;AT 11,15;" 70 ER-0 :WS=" " :BS-=" " 490
520 SOUND .02,20 80 GOTO 20 490 POKE 1295,128
530 IF PEEK 23672+256*PEEK 200 CLS:INPUT"DIGITE QUANTAS TE 500 NC-NC-1:IF NO0 THEN 400
23673>-t THEN LET er-er + 1 : CLAS PRESSIONADAS POR MINUTO" K ; 510 CLS:PRINT @448 "COM" KP "TE
.
;
;

GOTO 580 P CLAS PRESSIONADAS POR MINUTO"


540 LET l$-INKEYS: 1F lS-"" 210 IF KP<1 THEN 200 S20 RINT "VOCE ERROU" ER; "DAS"
.
;

THEN GOTO 530 220 INPUT "DIGITE O NUMERO DE C ;NM


550 IF iS-rS THEN PRINT AT 11 ARACTERES ";NC 530 RETURN
.15;""": GOTO 570 230 IF NC<1 THEN 220
560 LET er-er+1 240 NM=NC
570 IF PEEK 23672+256*PEEK
23673<t THEN GOTO 570
580 NEXT n
590 PHINT AT 16,3;"VOCE ERROU
-;er;" DAS ";n-l

610 IF KP<1 THEN 600


620 PRINT PRINT" NORMAL OU ESTEN
:

DIDO (N/E) 7"


630 A$=INKEY$:IF A$<>"N" AND AS
<>"E" THEN 630
640 RN-91 :ST=31 :IF AS="N" THEN
RN=58:ST=64
250 PRINT PRINT" NORMAL OU ESTEN
: 650 TM-3000/KP
DIDO (N/E)?" 660 CLS:POKE 282,0
260 AS-INKEY$:IF AS<>"N" AND AS 670 FOR K-l TO 32
O-E" THEN 260 680 CR=RND (RN) *ST
270 RN-90:ST=32:IF AS="N" THEN 690 IF CB>90 AND CR<97 THEN CB=
RN=58 ST-64
: 32
280 POKE 282,0 700 WS-WS+CHRS (CR)
290 TM=3000/KP 710 NEXT
300 CLS0: PRINT" PRESSIONE A TEC 720 AP=1248
LA DEPOIS DO BIP " 730 POKE AP 106,

^600 FOR £-1 TO 200; NEXT 310 PRINT §238," ";:PRINT @27 740 PRINT 8256, WS
610 GOTO 20 0. " " ;PRINT @302 "
:
,
" 750 TIMER-0
800 LET cS-"5. .4. 3. .2.
. 320 WS-CHRSÍRNDÍRNJ+ST) 760 AS-INKEYS:1F AS-"" THEN 780
810 FOR n-1 TO 16 330 IF WS>"Z" AND WS<"a" THEN 3 770 BS=AS
820 PRINT AT 2.5+n;cS(n) 20 780 IF TIMERÍTM THEN 760
830 PAUSE 10 340 PRINT #271, WS; 790 SOUND 150.1:IF BS-"" THEN 7
840 NEXT n 350 TIMER-0 50
B50 SOUND .2,10 360 AS-INKEYS:IF AS = " n THEN 380 800 TIMER-0
860 PRINT AT 2.0;TAB 31; 370 B$=AS:IF BS=WS THEN SCREEN 810 AS-1NKEYS:IF AS="" THEN 830
870 RETURN 820 BS-AS
830 IF TIMER<TM THEN 810
840 SOUND 150,
850 IF BSOMIDS(WS.AP-1247.1) T
HEN ER=ER+1:GOTO 860
855 POKE AP+64.94
860 POKE AP. 96
420 PRINT 8271, WS; 870 AP-AP+1
6 1;

8 APLICAÇÕES 8
llllllll

880 IF AP-1280 THEN 910 5S:ST-65


890 POKE AP, 106 200 TM-3600/KP
900 BS-"" :GOTO 800 300 CLS PBINT"PBESSIONE A TECLA
:

910 CLS:PBINT #481 "COM" KP "TE


.

;
;

APÔS O BIP"
CLAS POB MINUTO" 310 LOCATE15.10:PRINTSTRING$<4.
920 PRINT"VOCE EREOU" EH "DAS 3 219)
;

2"; : BETUBN 320 LOCATE15:PBlNTZSl" ";ZS


1000 CLS 330 LOCATE15:PRINTZ$;" " ZS ;

340 LOCATE15:PBINTSTBINGS<4.219 COMO AUMENTAR A VELOCIDADE


) DE DIGITAÇÃO
350 WS-CHBSIRND(1)«RN+ST) Convém começar 8 execução do
360 IF WS<"Z"ANDWS>"a"THEN350 programa de jogo de velocidade com o
10 CLS ZS"CHHS 219) :B"BND(-TIME
: ( 370 LOCATE 1 7 ,12: PBINTWS T1ME-0 i :
teclado normal e a uma velocidade bai-
) 380 AS=INKE¥S:IFAS-""THEN390ELS xa ipor exemplo, de cerca de trinta a
20 LOCATE 5.3:PB1NT"0UAL TESTE? EBS-AS IFBS-USTHENCOLOHl 5
: ,
cinquenta caracteres por minuto). Ao
(1-2)" 390 IFTIME<TMTHEN360ELSEBEEP IF :
mesmo tempo, procure não alterar o rit-
30 LOCATE 5,4:PBINT"DIGITE <0> BS-" "THEN3 70 mo de trabalho, digitando com a mes-
PABA TEBMINAR" 400 IFBSOWSTHENER-ER+1 ma velocidade tanto os caracteres co-
40 AS-INKEYS:IFA$<"0"ORAS>"2"TH 410 COLOR 15,4,4 nhecidos como os que lhe são menos
EN40 420 NC-NC-1 IFNO0THEN350 :
familiares lesse conselho vate principal-
50 ON VAL(A$)+1 GOSUB 1000.600. 430 ClS:LOCATE2,12:PRINT"A";KP; mente para quando você estiver com
200 o teclado completo).
60 ER-0:W$-"":BS-"" ; ER; 1

;NM Se o seu ritmo se mantiver constan-


70 GOTO20 te, você poderá selecionar o teclado
200 CLS INPUT"TOQUES POR MINUTO
:
completo e aumentar, gradativamente,
" ;KP a velocidade de digitação.
610 IFKP<1THEN600 Outra coisa muito importante para
620 PRINT PB I NT "TECLADO LETBAS
; :
quem está aprendendo a datilografar é
"
(MC OU TOTAL? {L/T) fazer todos os exercícios propostos
230 IFNC<1THEN220 630 AS-INKEYS:IFASO"L"ANDAS<>" sem olhar para o teclado do com-
240 NM-NC T"THEN630 putador.
?50 PRINT PR I NT "TECLADO
: LETRAS : 640 BN"91 :ST-32:IFA$-" L"THENRN= Mantenha os seus olhos fixos todo
?"
OU TOTAL (L/T) S8 :ST-65 o tempo na tela ã sua frente, e repou-
"
260 AS-INKEYS: I FAS<> " L " ANDASO 650 TM-3600/KP se as mãos sobre o teclado, distribuin-
"THEN260 66U CLS:F0BK=1T032 do os dedos pelas teclas de apoio da
70 RN-90 ST="33 IFAS- " L"THENRN-
; : 670 CR-INT(RND(1)*RN)+ST fileira central, conforme ensinamos na
primeira lição.

680 IFCH>90ANDCR<97THENCR-32
690 W$-WS+CHRS(CR)
700 NEXT
710 AP-564
720 VPOKEBASE (0) +AP, 205
730 L0CATE3,15:PRINTWS
740 TIME-0
750 A5-INKEY$:IFA$-""THEN760ELS
EBS-AS
760 IFTIME<TMTHEN?50
770 BEEP:IFBS-""THEN740
780 IFBSOMID$(W$,AP-563.1>THEN
ER-ER+1ELSEVPOKEBASE (0) +AP+80 ,

790 VPOKEBASE(0)+AP,0:AP-AP+1:I
FAP-596THEN810
VPOKEBASE (0) +AP 205 GOTO740
, :

BIO CLS LOCATE 2 15 PRINT" A" KP


: . : ;

"toques por minuto, você errou"


e 32"

FAÇA TODOS OS EXERCÍCIOS

Para adquirir um conhecimento pro-


fundo de todas as teclas de caracteres
pralique todos os exercícios apresenta-
dos até agora. Esta parte do curso é in-
dependente. Entretanto, em um artigo
posterior, você terá oportunidade de
praticar suas habilidades com algumas
frases e sentenças.
7 ^'«IIIIIIIII
Sistema de controle dos mais versáteis COMUNIOUE-SECOMO
JOYSTICKS e baratos, o joystick é
periférico
um
que serve tanto para COMO
COMPUTADOR
UM JOYSTICK
UTILIZAR
aplicações "sérias" como para TIPOS DE JOYSTICKS
tornar os jogos mais interessantes. ESCOLHA 0 JOYSTICK CERTO

Embora estejam ficando cada vez O segundo tipo de entrada, por sua Felizmente, existe uma alternativa: o
mais sofisticados, os computadores do- vez, transmite um tipo inteiramente di- joystick, um barato
periférico e acessí-
mésticos ainda não conseguem dar ins- verso de informação. Nela, a pressão a vel para microcomputadores. Talvez in-

si mesmos. Por enquanto (e es-


truções a uma tecla —em vez de provocar a en- justamente associado apenas aos jogos,
peramos que para sempre...), a respon- trada do caractere ao qual ela é normal- esse periférico cumpre diversas outras
sabilidade disso recai inteiramente sobre mente ligada —
aciona uma outra fun- funções.
o programador ou o usuário. Aprender ção bem diferente, determinada pelo O joystick é uma espécie de alavan-
a programar é. portanto, aprender a se programa. Por exemplo, se a tecla X for ca que pode ser movida em várias dire-
comunicar com o computador. pressionada, o cursor da tela será mo- ções pelo usuário. A
cada movimenta-
O principal meio de comunicação do vido para a direita; se for Z a tecla pres- ção, ele envia ao computador um sinal
usuário com o computadof continua sionada, o cursor será deslocado para a que indica a sua nova posição. A maio-
sendo o teclado. Mas existem muitas ra- esquerda. Diversos capítulos do curso de ria dos joysticks tem um ou mais botões

zões para considerar esse meio como BASIC e de Programação de jogos fo- pulsantes (chamados de botões de dis-
longe do ideal: a principal delas é que ram destinados a ensinar a programar paro) que, ao serem pressionados, ge-
o teclado torna a comunicação compa- esse tipo de entrada. ram sinais diferentes para o computa-
rativamente lenta em relação a outros Obviamente, o primeiro tipo de en- dor (joystick é um termo derivado do ae-
métodos. Além disso, o uso eficiente do trada depende do teclado de modo di- romodelismo e não tem tradução ade-
teclado exige que o usuário aprenda a reto. No segundo tipo, porém, essa li- quada para o português; a mais aproxí-
digitar com rapidez e precisão. gação não aparece de forma tão eviden-
Cosiuma-se classificar as entradas te. É difícii imaginar, por exemplo, que

efetuadas por intermédio do teclado em um usuário pouco familiarizado com o


dois tipos principais. Destes, o mais co- teclado consiga se lembrar de que pre-
mum e a entrada de um nome ou núme- cisa pressionar o P para movimentar
ro em que o programa solicita ao usuá- uma nave espacial para cima e, ao mes-
rio que entre algo como "nome e data mo tempo, apertar o F para disparar
de nascimento" e espera uma resposta uma arma.
tal como "João da Silva, 9.7.53".
Illllllll 2 PERIFÉRICOS 2

mada seria manche).


Com uma programação apropriada,
mesmo nos jogos de ação mais modes-
los, os joysticks podem assumir várias
das funções reservadas tradicionalmen-
le para o teclado; assim, eles encontram
muilas aplicações interessantes, úteis so-
bretudo para usuários que não querem
ou têm dificuidades em usar o teclado.
Por exemplo, em um programa de
gráficos, é perfeitamente possível utili-
zar um joystick ou um controle seme-
lhante para guiar o cursor que desenha-
rá na tela (na página 164 apresentamos
um programa que faz isso por meio do
ou para selecionar uma cor em
teclado),
uma "paleta" exibida na leia. Um joys-
tick também pode ser usado para for-
necer respostas alfabéticas ou numéri-
cas. Alguns jogos de fliperama, por
exemplo, possuem uma "lista de cam-
peões", na qual são exibidos os nomes
dos jogadores e seus recordes de pontos.
Neste caso, uma entrada alfabética curta
(por exemplo, as iniciais do jogador) é
realizada, usando-se o joystick para mo-
ver o cursor até a posição onde está a
letra desejada e, em seguida, o botão de
disparo para seledoná-la. Com um pou-
co de imaginação, é fácil incorporar es-
se truque na digitação de nomes e nú-
meros maiores ou, mais comumente, pa-
ra efetuar uma escolha entre um menu
de opções de programa, por exemplo.
Em um artigo futuro, você verá co-
mo programar o seu computador para
operar sob o controle de um joystick, de
modo a tornar um programa mais
atraente ou um videogame mais diver-
tido. Antes disso, porém, é necessário
entender quais são os diferentes tipos de ta com um botão de disparo que, ape- alguns casos, com um gatilho.
joysticks existentes para computadores, sar do nome, pode ser utilizado para ta- Joysticks mais modernos incluem dis-
e como podem ser utilizados. refas como selecionar uma letra ou as- positivos extremamente sofisticados, co-
sinalar uma opção. Esse género de joys- mo ponteiros munidos de indicadores
tick é muito usado em videogames; por ultra-sensiveis de gravidade. Esses indi-
isso, é comumente chamado de "tipo cadores servem para detectar pequenos
Atari" ou digital. movimentos ou inclinações da mão do
Nem todos os joysticks são adequa- Alguns desses joysticks possuem dois usuário (por exemplo, quando este
dos aos vários tipos de computadores ou mais botões de disparo que podem aponta para alguma locação na tela).
pessoais. Antes de adquiri-los, convém ser úteis para jogadores canhotos, por Eles utilizam interruptores de mercúrio:
certificar -se de que eles são compatíveis exemplo, ou para aumentar a velocida- sempre que a alavanca é inclinada, o
com a sua máquina. Existe ainda uma de ou o grau de conforto na manipula- mercúrio em seu interior se desloca pa-
outra restrição: ao se comprar um pro- ção de jogos difíceis. Esses botões se lo- ra uma das extremidades, fechando ou
grama de jogos (ou outro qualquer) que calizam normalmente na base, mas po- abrindo um contato elétrico. Taís dis-
utilize joysticks, é necessário verificar dem situar-se também na ponta da ala- positivos são tão sensíveis que não de-
cuidadosamente se ele foi escrito para vanca de controle. Dependendo do pro- vem ser usados em jogos, a menos que
o tipo de joystick que você possui. Den- grama, um botão pode, por exemplo, o programa tenha sido escrito especial-
tro dessas limitações básicas podem exis- ser usado para disparar um canhão, en- mente para eles.
tir, contudo, diversas opções de compra. quanto o outro aciona um dispositivo Oulro elemento da família dos joys-
O tipo mais simples de joysiick con- que deixa cair uma bomba; um botão ticks é a "raquete eletrõnica" (paddle),
siste em uma caixa rasa com uma ala- pode apagar uma linha de texto, en- que nada mais é do que um botão gira-
vanca, que pode ser movimentada em quanto o outro a edita, e assim por dian- tório, tipopotenciômetro. Neste caso, a
oito direções diferentes: para a esquer- te. Alguns modelos são especialmente posição angular do potenciômetro é de-
da, para a direita, para cima, para bai- planejados para se amoldarem à mão. tectada pelo computador, que pode usar
xo e para as quatro posições intermediá- Outros são modelados no formato de a informação para mover um cursor na
rias, em diagonal. Além disso, ele con- um cabo de pistola, complementado, em tela, geralmente no sentido horizontal.
IIIIIIIIIIIIIHHB ' "cos 2 lllllllllll
te ou na pena transmitem ao computa-
dor as coordenadas X e Y da ponta da
caneta.
As canetas ópticas são outro "paren-
te" dos joystieks, que permitem o dese-
nho direto sobre a tela, a escolha de op-
ções, etc, e estão se tornando cada vez
mais populares entre os usuários de
computadores domésticos.

Embora pareçam diferentes à primei-


ra vista, na verdade todos esses disposi-
tivos funcionam de maneira semelhan-
te. Em todos eles, o movimento é trans-
formado em uma série de sinais elétri-
cos que são "lidos" pelo computador.
Assim, como qualquer dispositivo
eletrônico, os joystieks podem ser tan-
to digitais quanto analógicos. Normal-
mente, uma linha de computadores acei-
ta apenas um dos tipos e mais raramen-
te os dois. No joystick digital existem di-
versos comutadores eletrònicos que são
abertos ou fechados conforme o ângu-
lo de movimentação da alavanca: assim,
um padrão único de bits é gerado para
cada posição. Os paddies e joystieks de
tipo analógico, por sua vez, funcionam
de forma diferente: eles são construídos
com um ou dois potenciómetros (resis-
lores variáveis), cujo ângulo dc rotação
é proporcional ao deslocamento da ala-
vanca nos sentidos horizontal e vertical.
As variações de resistência obtidas com
essas rotações são transmitidas ao com-
putador na forma de duas voltagens
proporcionais, de modo a fornecer uma
Alguns tipos de joysiicks resultam dc quando se rola o dispositivo sobre a su- única combinação para cada posição de
uma combinação de dois paddies, um na perfície de uma mesa. Seus movimentos controle.
posição horizontal e oulro na vertical. são detectados por um programa espe- Do ponto de vista visual, os dois ti-
Uma outra variante do joystick é cial,provocando deslocamentos corres- pos de joystick são também bastante di-
a "trackerball" (esfera de comando). pondentes de um cursor gráfico ou de ferentes. No tipo analógico, os poten-
Originalmente desenvolvida para apli- texto na teia. Assim, o camundongo po- ciómetros são montados cm ângulos re-
cações militares e "aviônicas , a esfera de substituir as teclas de controle do cur- tos e operados por um enlace mecâni-
de comando foi logo adaptada para sor. Ele permite movimentos rápidos so- co. A alavanca, em consequência, não
máquinas comerciais de jogos de flipe- bre a tela para alterar dados ou para so- fica balanceada ao centro, ou seja, per-
rama e estão entrando agora no merca- lucionar itens de um menu. As seleções manece na posição em que o usuário a
do dos computadores domésticos. Nes- são feitas por meio de um ou dois bo- deixar. Os tipos digitais, ao contrário,
se periférico, o controle é feito por meio tões no alto da caixa. Ao contrário dos são normalmente balanceados ao centro
de uma bola que se projeta acima da su- joystieks normais, o camundongo é uti- e, quando liberados, voltam automati-
perfície da caixa e que pode ser rolada lizado para desenhar na leia, mas qua- camente para a posição central ou neu-
em qualquer direção, com as pontas dos se nunca para controlar movimentos em tra. No entanto, alguns modelos analó-

dedos. jogos. gicos são balanceados ao centro.


Os modelos mais sofisticados desses Existem muitos outros tipos de dis- Por outro lado, uma nítida diferen-
dispositivos de controle são emprega- positivos que servem para controlar ça no comportamento mecânico separa
dos também em computadores de apli- o cursor na tela, mas cujo funciona- os dois sistemas. Os joystieks digitais
cação comercial e profissional. Um dos mento é bem diferente do dos joystieks (balanceados ao centro) são mais duros
mais recentes é o chamado "camun- e de seus "parentes". Um deles é o ta- e normalmente só se movimentam por
dongo" (mouse), que se parece com blete gráfico, que consiste em uma me- uma pequena distância. Assim, um es-
uma trackerball de cabeça para baixo, sa reiangular, sobre a qual se pode "es- forçomaior feitopelo jogador é contra-
embora existam também versões que crever" com uma caneta especial, ou balançado por uma maior resistência
funcionam de acordo com outros siste- mesmo com o dedo (touchpad). Senso- mecânica.
mas. O camundongo entra em ação res localizados na superfície do table- Na verdade, o efeito que ambos os ti-
iiiiiiiiiiuim» * ™«» iiiiniiii 2

pos provocam no computador é contro- ciado, de modo a assinalar ao progra- ou analógicos (paddles).
lado mais pelo programa do que pelo ma se alguma tecla foi pressionada. Se Uma das diferenças mais importan-
próprio joystick. Geralmente, um pro- o programa poderá
isso acontecer, efe- tes entre micros diz respeito ao interfa-

grama bem escrito torna o joystick mais tuar alguma operação específica — ta! ceamento.
sensível e fácil de controlar. Por exem- como a movimentação de uma base de
plo, um programa pode determinar que mísseis para a direita, se a tecla X, por INTERFACEAMENTO
um leve movimento da alavanca seja su- exemplo, for pressionada.
ficiente para dar início a mudanças de Aoperação do joystick digital não di-
direção de um objeto na tela, sem que fere essencialmente disso. Mas enquan- Como qualquer periférico de compu-
haja necessidade de se pressionar conti- to o teclado é parte integrante do com- tador, os joysticks precisam ser conec-
nuamente a alavanca. putador, o joystick é um elemento ex- tados à UCP por intermédio de uma in-
Já os tabletes digitalizadores que fun- terno acoplado a ele. Assim, o joystick terface adequada. A
interface pode es-
cionam por toque (touchpads) consistem deve primeiro ser conectado ao compu- tar integrada à configuração básica da
em um sanduíche de duas folhas de plás- tador através de uma porta adequada UCP do computador, ou pode ser um
tico, separadas por uma pequena dis- (um conector especial); é por essa porta dispositivo separado.
tância. Uma fina grade de resistores que o micro normalmente se comunica Muitos fabricantes incorporam aos
ou fios condutores é construída sobre com o mundo exterior. Em seguida, é seus micros um conector e uma interfa-
uma das faces dessas folhas, orientadas necessário colocar na memória RAM do ce do tipo Atari, de modo a fazê-los
de modo a formar ângulos retos entre micro um programa adequado para aceitar qualquer joystick que seja de
si. Ao menor contato de um dedo ou de "varrer" periodicamente a porta de en- um modelo compatível com esse padrão.
um lápis com o tablete, os condutores trada, de modo a procurar por um si- Outra saída seria dispor de uma-ou
situados nas duas folhas se tocam e ge- que o joys-
nal específico, que signifique mais portas analógicas, que aceitam
ram um padrão de volíagens, que é var- tick está sendo movimentado. paddles ou joysticks do tipo potenciô-
rido pelo computador. Os touchpads. Alguns problemas de compatibilida- metro. No entanto, são raros os micros
entretanto, podem apresentar proble- de podem surgir entre esses periféricos que já incluem essas portas em sua con-
mas, devido à dificuldade de se conse- e o computador. Em primeiro lugar, o figuração básica, pois isto significa que
guir uma uniformemente sen-
superfície joystick precisa ser conectável à porta devem ser construídos dois conversores
sível. Uma desvantagem em utilizá-los de entrada do micro, seja diretamente. analógico-digitais para cada joystick a
é que. se a superfície se sujar — por seja através de algum tipo de interface. ser utilizado.
marcas de dedos, por exemplo — , os Além disso é necessário que o progra-
movimentos tenderão a se tornar errá- mador conheça os sinais gerados pelo
ticos devido ao deslizamento do dedo joystick; caso contrário, não será pos-
pela superfície. sível programar o computador para pro- Os micros da linha Sinclair Spectrum
Extremamente leves, as trackerballs curá-los. não vêm acompanhados de joysticks.
podem ser operadas com facilidade, pois Essas exigências dão lugar, ás vezes, Assim, para ajustar a eles um desses pe-
a bolanão tem conexão mecânica dire- a tremendas confusões. Felizmente, já riféricos, é necessário uma interface
ta com o sistema sensor. Ela é sustenta- existem padrões de mercado seguidos apropriada ao conector de borda exis-

da sobre rolamentos que giram livre- em maior ou menor grau por diferentes tente atrás do console.
mente em duas direções, em ângulo re- fabricantes. No Brasil, cada linha de mi- A interface é alojada em uma caixa
to uma em relação à outra. Quando a crocomputadores apresenta um conjun- separada que se situa na pane posterior
bola sofre uma rotação, ela faz rodar to bem definido de convenções. pa- O da máquina, em contato direto com os
um ou ambos os rolamentos. Estes, por drão mais comum, que se tornou vir- terminais do conector de borda, na en-
sua vez, estão conectados a potencióme- tualmente universal, é o do joystick ti- trada do usuário. Existe, porém, um ti-

tros ou a um sensor digital —


um siste- po Atari (digital e centro-balanceado). po de interface (disponível apenas no
ma formado por um disco rotatório pa- Existem diversos fabricantes de joysticks Exterior) construída dentro da caixa do
ra interromper um raio de luz prove- desse tipo, e alguns computadores são próprio joystick, com um conector se-
niente de um diodo LED (foto-emissor), projetados de modo a aceitá-los direta- parado para o cabo de ligação.
que sobre um fototransistor (foto-
cai mente. O joystick mais adequado para o
sensor). Com a contagem de impulsos É o caso, por exemplo, da linha Sin- Spectrum é compatível com o tipo Atari.
de interrupção, o computador fica "sa- clair (ZX-81 e Spectrum), cujos com- No Exterior, entretanto, existem muitos
bendo" de quanto girou o rolamento. patíveis nacionais (TK-85..TK-90X, etc.) outros tipos de joysticks, que são incom-
Mais uma vez, qualquer que seja o sis- incluem um conector para
joysticks ti- patíveis entre si no que se refere aos si-
tema utilizado, o computador é capaz po Atari. Os modelos da linha MSX nais que geram no conector de expansão.
de interpretar os sinais elétricos em ter- têm, por sua vez, entrada para dois joys- Por isso, o usuário do Spectrum de-
mos de um padrão determinado de mo- ticks tipo Atari. Os compatíveis com o ve tomar muito cuidado quando com-
vimentação na tela. TRS-Color (por exemplo, o Prológica prar ou copiar programas provenientes
CP-400) utilizam joysticks analógicos. do Exterior que utilizem joysticks, pois
Já os micros da linha TRS-80 normal- eles nem sempre funcionam com o joys-
OPERAÇÃO COM 0 COMPUTADOR
mente não contam com nenhum tipo de tick disponível no Brasil. Assim, é con-
entrada para joystick. veniente verificar a documentação do
Os comandos GETS ou 1NKEYS do Além disso, podem existir, às vezes, software antes de adquiri-lo. Alguns
BASIC são os mais utilizados para pro- diferenças importantes entre diversos programas mais sofisticados incluem um
gramar a execução de funções de movi- modelos de máquinas da mesma linha, menu de opções que permitem ao usuá-
mentação do cursor de vídeo, sob con- como no caso do Apple, que tem pro- o tipo de joystick a ser
rio selecionar
I irole de determinadas teclas do teclado. tótipos nacionais que aceitam joysticks usado para acíonar o jogo.
digitais tipo Atari {é o caso do TK-2000), Outro problema para os proprietários

r
IIIIIIIIIIIIHiaH^HHHHHHIIIIIIIIIU
do Speclrum é que as interfaces mais co- produtos comercialmente disponíveis no
muns desse micro só possibilitam a co- mercado.
nexão de um joystick. Entretanto, algu- No primeiro caso, é necessário efe-
mas interfaces mais sofisticadas permi- tuar uma modificação no hardware,
tem a conexão de dois joysticks ao mes- conectando fios em paralelo com a in-
mo tempo. Infelizmente, porém, são ra- terface do teclado. Em seguida, deve-se
ros os softwares compatíveis com tais in- ligar a máquina ao joystick. Uma vez
terfaces. em operação, este gera sinais semelhan-
O interpretador BASIC do Spectrum tes aos provocados pela pressão das te-
não tem nenhum comando específico clas de controle do cursor, que podem
para programação com joysticks. As- ser detectadas por meio do comando
sim, o mais comum é usar o comando INKEYS, do BASIC. Há um dispositi-
1NKEYS. vo fabricado no Brasil —
"joypad", um
pequeno teclado paralelo apenas com as Como funciona um conversor ana-
teclas de controle de cursor {joypad) — lógico digital?
cuja função consiste em facilitar o de- Necessário para converter em nú-
O ZX-81 está longe de ser uma má- sempenho em jogos. meros binários as voltagens continuas
quina ideal para jogos. Entretanto, as- Para conectar dispositivos analógi- geradas pelos paddles e joysticks ana-
sim como o Specirum, é possível conec- lógicos, o conversor A/D realiza uma
cos, é necessário adquirir uma interfa-
tá-lo a um joystick do tipo Atari por in- tarefa de digitalização do sinal elétrico
ce especial de conversão analógíco-digi-
termédio de um conector Phillips, situa- de entrada.
tal, que é ligada à porta de expansão,
do na lateral ou na traseira do console. Suponhamos que uma rotação de
na parte de trás da UCP. 8 graus num dos potenciómetros do
Portanto, a operação com esse micro é 1 1
No TRS-80 não existem comandos joystick gera uma voltagem proporcio-
parecida com as descritas acima.
específicos do BASIC para os dois tipos nal entre 0 e 5 volts. O conversor A/D
O BASIC do ZX-81 não tem nenhum de joysticks. tem um comparador interno que ger3
comando específico para a programação voltagens sucessivas, divididas em um
de joysticks. como é o caso dos micros certo número de intervalos (por exem-
da linha MSX, Apple e TRS-Color, mas plo, 256 intervalos de 0.01 95 volts ca-
o comando INKEVS pode ser usado da Os microcomputadores da linha da, se for um conversor de oito bits)
mesma forma que com o teclado, pois MSX incluem portas de entrada para A cada nivel interno de voltagem, o cir-
os joysticks para o ZX-81 geram sinais joysticksdo tipo digital centro- balancea- cuito compara-o com o nivel externo de
correspondentes às teclas de controle de com dois ou mais botões de dispa- voltagem (gerado pelo jovstick) e de-
do,
cide se esses valores são aproximada-
cursor (6, 7. 8 e 9, combinadas com ro. No Brasil, cada fabricante oferece
mente iguais ou não. Ao mesmo tem-
<SHIFT>). o seu modelo próprio de joystick, mas po, outro circuito digital vai contando
Isto é uma vantagem adicional, pois o padrão de conexão e geração de sinais quantos desses níveis foram testados.
um jogo que utilize tais teclas operará segue o do Atari. Assim que o comparador inlormar que
igualmente bem, com ou sem joystick Da mesma forma que o TRS-Color, a igualdade foi atingida, o conversor
(só que ficará mais divertido com o joys- o interpretador BASIC dessas máquinas A/D enviará ao computador, através da
tick, como é o caso de um popular pro- contém comandos bastante poderosos. interface paralela, o byte contendo o
número de contagens Por exemplo, se
grama de simulação de vôo de uma ae- .

a voltagem gerada pelo joystick for


ronave).
ao 1.95 volts, o número enviado para o
computador será 100!
A
maioria dos micros da linha Ap-
ple apresenta no console duas portas pa-
Os microcomputadores da linha ra dois paddles analógicos, ou para um
TRS-Color incluem duas entradas para joystick de dois eixos (não ceniro-balan- do TK-2000. Não existem joysticks ou
joysticks analógicos, do tipo potenciõ- ceado). O interpretador BASIC incor- paddles do tipo analógico para esse
metro de centro não-balanceado. Esses pora comandos para leitura da posição computador.
joysticks têm botões de disparo, e po- dos potenciómetros e da pressão ao bo-
dem ser facilmente programados por co- tão de disparo.
CUIDADO AO COMPRAR UM JOYSTICK!
mandos específicos do interpretador Existem ainda no mercado joysticks
BASIC. A tela de alta resolução gráfi- do tipo digital, que podem ser conecta-
ca,quando associada por programação dos via porta serial ou paralela. Ao comprar um joystick, verifique
ao uso desses joysticks, permite efeitos primeiro se o modelo escolhido é com-
sensacionais de animação gráfica, em patível com o seu computador e, no ca-
jogos ou no desenho livre. so do Speclrum, com o seu software
O
Microdigital TK-2000 inclui, na também.
versão padrão, um conector específico Em
seguida, pense em quanto você
para joystick digital do tipo Atari, que está disposto a gastar; se você é proprie-
Os micros da linha TRS-80 não in- opera paralelamente ao teclado normal tário de um Spectrum, tenha em men-

cluem nenhuma previsão ou porta espe- (ou seja, gera sinais correspondentes às te que a interface poderá custar tanto

cial para joysticks. teclas de controle do cursor e às teclas quanto o joystick, ou até mais. Os tipos
Entretanto, esses computadores po- FIRE dos dois lados do teclado). Assim, mais simples de joysticks custam o mes-
dem ser conectados tanto a joysticks di- a utilização do joystick pode ser progra- mo que um programa de jogo. enquan-
gitais do tipo Atari, quanto a joysticks mada por meio de comandos GETS ou to os mais elaborados podem ser duas

e paddles analógicos; para isso, existem PEEK do teclado existentes no BASIC ou três vezes mais dispendiosos.
Variáveis de entrada:
A$(N) — conjunto unidimensional a
ser classificado(tamanho de N> = 1)
NI — primeiro item cm conjunto a ser
classi ficado < = N 1< = N2)
( 1

Uma vez elaborado o projeto geral de uma descrição dos seus usos e possíveis N2 — último item em conjunto a ser
um programa e escritos os módulos in- valores iniciais, caso sejam conhecidos. classificado (Nl< = N2< = o tamanho
dividuais, pode-se começar a pensar em Do contrário, mesmo que se saiba no de A)
testar os módulos. Em seguida, é neces- início o que significam iodas as leiras,
sário planejar a forma de colocá-los lo- corre-se o risco de esquecer de retornar Variáveis dc saída:
dos juntos. ao programa mais tarde. Um recurso A$(N> — conjunto ordenado.
As subrotinas ou módulos precisam bastante prático, caso o computador
ser colocados de alguma forma deniro permita ou o espaço de memória não se- Variáveis temporárias:
do contexto do programa. Normalmen- ja muito pequeno, consiste em adotar Z, Z$, L
te, a ligação é feita por meio de variá- nomes longos para as variáveis {veja na
veis. Algumas destas —conhecidas co- página 99 uma tabela do que é permiti- Uma providência muito útil para evi-
mo parâmetros de entrada —
são espe- do para cada linha de microcompu- tar conflitos entre módulos ou com o
cificadas no inicio, e passadas à rotina. tadores). resto do programa consiste em listar as
Outras variáveis retornam ao programa variáveis temporárias utilizadas em uma
por intermédio da rotina; estas são os
ROTINA DE ORDENAÇÃO TIPO BOLHA
sub-rotina. Também é útil reservar al-
parâmetros de saída. É muito importan- gumas especialmente para variá-
letras,
te que as variáveis sejam especificadas veis temporárias: por exemplo, as variá-
de um modo preciso para não serem Como se deve especificar as variáveis veis de ZO a Z9. Esse tipo de recurso evi-
confundidas umas com as outras. para uma rotina de ordenação tipo bo- ta desperdícios de espaço das variáveis.
Ao se começar a escrever um progra- lha? O exemplo a seguir apresenta uma Alguns erros ou defeitos de progra-
ma deve-se fazer uma lista de todas as porção especifica de matriz ordenada al- ma são causados às vezes por variáveis
variáveis necessárias, juntamente com fabeticamente. viciadas — isto é, com valores mudados.
I— PROGRAMAÇÃO BASIC 21

Aperfeiçoe as técnicas da programação DEFINA AS VARIÁVEIS


estruturada, aprendendo a COMO ESCREVER U
construir um programa de ordenação SUB-ROTINA DE ORDENA
pelo método de bolhas, e COM O TESTAR OS MÓD U
coloque em ordem o que quiser. COLOQUE TUDO J

Como toda sub-rotina, esta deve ser


chamada a partir do programa princi-
Esses problemas, cornudo, podem sei pal. Por exemplo, para ordenar os itens
evitados com a aplicação do método ex de 5 a 20, a rotina pode ser chamada
posto acima. assim: 8 INPUT "Número de item
Uma listagem de variáveis também 10 DIH AS(N)
útiipara o caso de o programa vir a sei 12 PRINT"Entrada doa lt«
modiricado mais tarde. Essa medida
segura maior rapidez na alteração das 14 FOR I-l TO N: INPUT AS<I):NE
variáveis, impedindo ao mesmo tempo É preciso também que exista uma se- XT I
16 INPUT -Intervalo a ser orden
o aparecimento de en-os extras no pro- ção do programa que lhe permita entrar
ado ";N1,H2
grama. Tais erros são normalmente pro- os itens a serem ordenados, e outra que 18 GOSUB 1000
vocados por variáveis viciadas, utiliza- imprima a lista ordenada. Neste estágio 20 PRINT* Liata ordenada:"
das para outros propósitos. Lembre-se você deve decidir como quer que a exi- 22 FOR 1-1 TO N PRINT AS(I):NEX
:

ainda de anotai as modificações, junia- bição apareça na tela. T I


mente com as datas cm que foram feitas. Se vocc trabalha com um MSX, po- 24 GOTO 16
Eis aqui o programa para uma roti de tirar proveito do poderoso BASIC
na de ordenação por bolhas (seu funcio- desse micro. Mude a linha 1040 para
namento será explicado mais adiante, na SWAP A$(1).A${I + l> e elimine as li-
lição número 23 de Programação nhas 1050 e 1060. Seu computador tro- O programa acima também funcio-
BAS/Q. cará O conteúdo das duas variáveis de nará no TRS-Color e TRS-80, desde que
uma só vez, dispensando o uso da va- se adicione a linha a seguir, cujo objeti-
riável Z$. vo é reservar um espaço suficiente de
1000 REM ORDENAÇÃO TIPO BOLHA (

ASCN) .M .Ni')
1010 LET Z-0
1020 FOB I-Nl TO NZ-1
1030 IF AS(IX-A$(I + 1] THEN GOT
O 1080
HífffMM memória:
6 CLEAR 1000

Cada módulo do projeto original po-


1040 LET ZS-AS(I) de se tornar uma sub-rotina no seu pro- No ZX-81 e no Spectrum, modifique
1050 LET AS(1]-A$(I*1) grama. Esse método de dividir o progra- a linha 10 do programa acima para:
1060 LET A$(I+1)-Z$
1070 LET Z-l
ma c muito Ml durante o estágio de les-
10 DIM AS(N.IO)
te, pois os módulos podem ser postos à
1060 NEXT I
1090 IF Z-I THEN GOTO 1010 prova ou depurados individualmente. No ZX-81, fracione as linhas com de-
1100 RETURN Volte agora à sub-rotina da ordenação clarações múltiplas, mude tudo parai
tipo bolha, teslando-a assim: maiúsculas, e altere a linha 8 paia: ]
,

8 PBINT "NUMERO DE ITENS" você terá um programa perfeitamente mostrar como um módulo pode ser
9 INPUT N estruturado que fará exaiamente o que construído e depois testado, antes de ser
Entretanto, a tarefa de testar cada ca- for determinado. encadeado ao programa principal. As
so de entrada e de saída pode se revelar As regras para se escrever um progra- roiinas de ordenação são muito úteis pa-
impossível em programas complexos, ma estruturado são, resumidamente, as ra todos os tipos de programas. A que
exigindo um tempo excessivamente seguintes: apresentamos agora classifica palavras
grande. Apesar disso, os casos limítro- cm ordem alfabética, mas poderia ser-
fes podem ser checados, Por exemplo, 1. Escreva uma descrição geral do vir também para classificar números em
a rotina seguinte pode ser verificada pa- programa. ordem crescente. Basta modificar as va-
ra entrar valores de 1,99 e 100, 2. Divida-a em tantos módulos quantos riáveis ZS para Z.e o conjunto A$( pa-
I

forem os níveis necessários. ra A( ).


1010 PBINT "ENTRE UM NUMERO
(1-99) "I 3. Desenhe um fluxograma para cada O computador percorre a lista, com-
101S INPUT N módulo c defina as variáveis de en- parando pares de itens, um de cada vez.
1020 IF «<1 OR N>99 THEN COTO trada c de saida e de quaisquer ou- Sc eles estiverem em ordem correia não
1010 tros efeitos, tais como a exibição na serão mudados. Se estiverem em ordem
1030 RETURN tela. incorreta serão intercambiados. O
pro-
Outra providência aconselhável é 4. Escreva os programas para cada mó- grama continua através da lista, efe-
certificar-se de que cada linha do pro- dulo que utilizar as estruturas descri- tuando mais trocas até que todos os
grama foi rodada pelo menos uma vez tas na parte I itens estejam em ordem correia.
durante o estágio de depuração. Assim, 5. Teste os módulos, fornecendo as en- Para avaliar o funcionamento do
todos os desvios condicionais, tal como tradas e checando os resultados e as programa em detalhes é conveniente
a declaração IF, poderão ser chocados saídas. compará-lo com o fiuxograma. A pri-
com ambas as condições de verdadeiro 6.Combine todos os módulos e teste o meira parle do programa (que não está
ou falso. conjunto do programa. no diagrama) define o número de iiens
A finalidade de todo esse trabalho é da lista N — —
e estabelece um conjun-
aumentar a legibilidade de um progra- tocharaado A$( ) com espaço suficiente
COLOQUE TUDO JUNTO para N itens. As linhas 12 e 14 pedem
ma, assim como sua capacidade, segu-
rançae transportabilidade. Além disso, ao usuário as palavras que serão arma-
Finalmente, todos os módulos pode- ele faciliia a tarefa de testar e modifi- zenadas no conjunto e a linha 16 per-
rão ser encadeados e o programa testa- car o programa. gunta quais delas serão ordenadas. Se
do como um todo. isso é conhecido co- você quiser ordenar a lista inteira, digi-
mo integração do programa. Se ocorre- te seguido de uma virgula, mais o va-
1
COMO FUNCIONA 0 MÉTODO DAS BOLHAS lor de N. A sub-rotina é chamada na li-
ram problemas, qualquer módulo sus-
peito poderá ser checado novamente e nha 18.
modificado em caso de necessidade. O programa de ordenação pelo mé- Arotina começa estabelecendo Z
Cumpridas iodas essas exigências, todo das bolhas foi utilizado aqui para igual a 0. Z é conhecido como um sina-
, .:

IIIIIIIIIIIHI » cODKootiuaum ,2
lllll
Bem mais rápido do que o programa para

ASSEMBLEIR PARA o Spectrum, o Assembler para os


micros da linha TRS-Color proporciona

OTftS-COl» igual eficiência.

tempo, aprendendo a trabalhar com


Economize
ele.

Nesta lição, apresentamos um As-


sembler para o TRS-Color. Mais longo
do que o programa para o Sinclair ZX
Spectrum objeto da lição anterior, ele
conta com a participação de um editor.
O microprocessador utilizado pelo
TRS-Color é o Motorola 6809 de oito
bits, cujo conjunto de instruções é bem
menor que o do Z80, empregado pelo
Spectrum. Entretanto, o Assembler do
TRS-Color tem que passar por até três
"etapas" para traduzir um comando de
dezesseis bits, enquanto o programa do
Spectrum deve passar por no máximo
duas. Apesar dessa etapa adicional, o
programa do TRS-Color é quase três ve-
zes mais rápido que o do Spectrum: seu
grande recurso para procurar os mne-
mónicos —a função INSTR não —
existe no BASIC do Spectrum.

A linha 0 pode provocar um erro FC


1

quando o programa é rodado pela pri-


meira vez. Não se importe com a men-
sagem de erro e rode o programa nova-
mente, que ele funcionará.

10 PMODE 0:PCLEAR 1 CLEAR 3000: :

CLS:PRINT §233 " INICIALIZANDO"


.

HS-CHRSU3) :POKE 146,1


20 DIM SKS(l) .Kl (94) ,K2{94) ,TS(
200) .RR(IOO) .ZSU00)
30 FOR CC = 1 TO 94 READ : K3.KHCC
) .K2 (CG) :OCC/49:SKS(C)-SKS(C) +
RIGHTS (STRS <CC) 2) +KS :NEXT
,

40 DATA ADCA, 185 1 ,ADDA, 187 1 ,A


. ,

DDD. 243 2. ASL, 120 3 CLR 127, 3 C


. , , , ,

MPA.177,1,CMPD,4275,2,CMPY,4284
,2 ,BCC, 36,4 ,BCS 37,4, BEQ ,39,4
,

50 DATA BHS.36.4.BLO,37,4,BMI,4
3.4, BNE ,3B.4,BPL,42,4, BRA .32,4,
LBRA,22,5.BSR.141,4,LBSR,23,5,C
MPX .188,2, CMPU, 4531 2 CMPS .4540 ,

,2,DEC.122,3
60 DATA ÍNC.124.3.JSR.189.3.LDA
.182,1, LDB 246 , , 1 , LDD ,252,2. LDS
4350.3.LDU.254,3,LDX.190,3,LDY,
4286, 3. LSL, 120,3, LSR, 116.3
70 DATA PSHS,52.1.PSHU.54,1.PUL
S,S3.1.PULU,55,1.B0L.121.3,R0H,
116. 3.RTS.57, ,STA,183,3.STB,247
,3,STD.253.3,STS.4351,3.STU,255
3 DP 3í(

iiiiiiimiiw—^—iiiiiiii
.,
. ; :

CONVERSÃO AUTOMÁTICA DA MANIPULAÇÃO DE PÚS-BYTES


LINGUAGEM ASSEMBLY PARA USO DE RÓTULOS
CÓDIGO DE MAQUINA COMO COLOCAR CÓDIGO DE
COMO CALCULAR SALTOS E MAQUINA NA MEMORIA
DESVIOS AUMENTA A VELOCIDADE

330 GOSUB 1320


80 DATA STX. 191 3.STY .4287, 3 SU . ,
340 GOSUB 1260 OPS=CS IF LEFTS
: :

BA 1 76 1 SUBD .179.1. ANDA 1 BO 1


. , , , ,
OPS.D-""" AND PS-3 THEN PRINT
ABX, 58, ANDCC. 76. 1 ASR, 119. 3 RT
. . .
OPS
1,59, .SBCA, 17B. 1 ,NOP, 18, ,NEG,11 350 IF LEFTS(OPS.l)-"*" THEN 33
2,3 0
90 DATA BITA.181.1,BGE.44.4,BGT 360 IF OP$="END" AND PS=3 THEN
,46,4,BHI.34.4.BLE,47.4.BLS,35, PRINT PRINT"
: FIM. ULTIMO ENDE
4 BLT .45.4. BRN .33.4. BUC 40 4 BV
, , , ,
RECO" P-l ;

S.41.4,EXG.30.1,TFH,31.1 370 IF OP3-"END" THEN 300


100 DATA COM ,115,3. CU AI ,108,1 ,
380 IF OPS<>"ORG" THEN 420
AA. 25, EORA 184, l.TST, 125,3, LEA
, ,
390 GOSUB1260 S=0 IF LEFTSíCS.l
:

S 66 3 LEAU .67,3. LEAX 64 3 LEAV


, , , . . .
)_-*- THEN S=P-C$=MID$(C$,2)
,65,3,MUL,61. ,ORA,138.1,ORB,202 400 P-VAL (CS) +S: IF PS-3 THEN PR
. 1 INT PRINT"
: ORG";P
110 DATA ORCC, 74 1 SEX 29, SWI . , , .
410 GOTO 330
63. ,SWI2,4159, .SWI 3, 441 5. ,SYNC. 420 IF P-0 AND PS-3 THEN PRINT"
19. EQU, -1 2 FCB, -2 1 FDB, -3 2
, , , , , ,
FALTA ORG" :P=35Q00
RMB -4. JMP, 126
,
,
430 CC=0^DF=O
440 C-INSTR (SKS (CC) OPS) IF CO
,

120 DIM XS (13) ,V(14) .KKU3) ,YS ( , :

13) 0 THEN GOSUB 530;GOTO 570


130 FOR C-0 TO 12 HEAD XS(C).V< : 450 C-INSTR (SKS (CCJ LEFTS (OPS . .

C) .KK(C) ,YS(C) : NEXT )):IF COO AND RIGHTS (OPS 1)<"C ,

" AND MIDS(SKSICC) ,C+3.1X"A" T


140 DATA PCR .253,7, , PC, 253, 8, D,
— ,243,1, X,-. 242,1. Y,X, 159. ,U,Y HEN GOSUB 530:GOTO 540
""
,191. ,8,0,223,, PC 460 IF COO AND RIGHTS (OPS 1 . )

150 DATA 3, 255, ,++ 241 1 ,+, 24 , , , ,


B" GOSUB 530:GOT0 560
0,1,A,A,246.1,B,B.245.1,CC,D,25 470 C-INSTR (5KS (CO ,RIGHTS(OPS,
1.l.DP 3)):IF COO AND LEFTS (OPS 1) ="L .

" GOSUB 530:GOTO 550


160 FOR J-0 TO 9 READ : PUSfJKPU
(J) :NEXT 480 CC=CC+lrIF CC<2 THEN 440
170 DATA PC, 128, U, 64. S, 64. Y, 32, 490 IF PS-3 THEN PRINT OPS
X,16,DP,6.D,6.B,4.A.2,CC.l 500 GOSUB 1350:Q3-Q2:RR(Q2)-P:I
1B0 CLS:PRINT 64 3 " ASSEMBLER"RS ,
F CS-"" THEN 340
RSTAB (8 "G-LER DO GRAVADOR" RSSS
)
510 IF PS«3 THEN PRINT " LINHA
TAB[8) "S-SALUAR NO GRAVADOR " R SR NAO RECONHECIDA"
$TAB(8) "A "MO NT AR" 520 GOTO 330
190 PRINT €296 "E-EDITAR LINHA" ,
530 C=VAL(MIDS(SKS(CC) ,C-2,2))
RSRSTAB (8) "D^APAGAR LINHA"R3RST RETURN
AB(8)"L-LISTAR NA TELA" 540 OP-K1 (C)-32 + 16* (RIGHTSIOPS.
200 AS-INKEY$:IF AS-"" THEN 200 1J--A-) :K2=0:GOTO 5B0
210 JJ-INSTR("GSEDLA",A3) 550 OP-K1 (C) +4096 K2=5 :GOTO 580
:

220 IF JJ-0 THEN PRINT "<"AS">I 560 OP-K1 (C) +64 :K2-1 :G0TO 580
NVALIDO":FOR J-l TO 1000:NEXT:G 570 OP-K1 (C) :K2-K2 (C)
OTO 180 580 IF PS=3 THEN BY=P/256 GOSUB :

230 CLS:ON JJ GOSUB 1420,1450,1 1240:BY-P-32768:GOSUB 1240:PRI


490 1710, 1760. 280
,
NT" "OPS:
240 PRINT «0, "PRESSIONE <ENTER> 590 IF OP>-l THEN 740
PARA CONTINUARQUALQUER OUTRA T 600 GOSUB 1260:ADS=CS:IF PS=3 T
ECLA PARA MENU PRINCIPAL" HEN PRINT " " LEFTS (ADS 10 ,

250 A5'INKEYS-IF A$="" THEN 250 610 ON -OP GOTO 620,630,660,730


260 IF ASORS THEN 180 620 GOSUB 1860:IF NU-0 THEN RR
270 ON JJ GOSUB 1420,1450,1700. Q3)=-R:GOTO 330 ELSE 1050
1710, 1650. 290:GOTO 240 630 IF PS=3 THEN PRINT TABI20);
280 K-0:K9-0:PO-0 640 GOSUB 690:BY=255ANDR:GOSUB
290 PS-0 1230
300 PS=PS+1:IF PS<4 THEN K = K0 P : 650 IF BS-ADS THEN 330 ELSE 640
=P0:PRINT «1. "INICIO DA ETAPA" 660 IF PS-3 THEN PRINT TABI20);
S:GOTO 330 670 GOSUB 690:BY-INT(R/256) :GOS
310 PO=P:RETURN UB 1230:BY-R-256*BY:GOSUB 1230
320 IF PS = 3 THEN PRINT " ERRO D 680 IF B$=ADS THEN 330 ELSE 670 I
E POSBYTE" 690 NN^INSTR (ADS " " IF NN=0 Tl
, ,
) :
) :(

HEN BS-ADS:G0TO 710 1070 IF K2>3 THEN R-R-P-2+ (OP>2 1090 IF PS-3 AND((OP>31 AND OP<
700 BS-LEFTS (ADS.NN-1) :ADS-MIDS 55)+(B<>239)+(K2>4) :R-R-( (K2-6) 48)OR 0P-141)AND(R<-128 OR R>12
(ADS. NN+1) AND(R>-129>AND(R<126) ) :K2-K2-3 7) THEN PRINT " DESVIO FORA DE F
710 IF LEFTSfBS.D-"3" THEN R-V
1080 IF B-239 AND K2-3 THEN K2- AIXA" :GOTO 330
AL("i.H"+MIDS(B5,2))ELSE R=VAL(B
:

S) 2:IF R<256 AND DF-0 THEN K2-1 :0 1100 IF B-255 THEN B-159:K2-2
720 EtETURN P-OP-32:IF(240 AND 0P)-8D THEN 1110 IF B<>239 THEN OP-OP-16:IF
730 GOSUB 1660 IF NU-0 THEN P-P :

OP-OP-60 K2-3 THEN K2-2 IF ABS(R+.5)<12


:

+R:GOTO 330 ELSE 1050


740 B-239:ÍF K2-0 THEN 1140
750 GOSUB 1260:ADS-C$:IF PS-3 T
HEN PRINT " " LEFTS (ADS 9j 1 i

760 IF K2>3 THEN 1040


770 IF(K2<>3 OR (LEFTS (OP$ 2) -" .

LD" AND LEFTS (ADS. D


) ) THEN
ADS-MIDSÍADS. 2) DF-1 0P-0P-48 : :

GOTO 1040
780 IF RIGHTS {ADS D "" ) " THEN A .

DS-MIDS(ADS,2. LENÍADSJ-2) :8=B+1


6
790 IF OP<52 OR OP>55 THEN 670
800 K2-1:R-0:AAS-ADS
810 NN-INSTR (AAS " " ) IF NN-0 T . . :

HEN US-AAS:GOTO 830


820 US-LEFTS(AAS.NN-l) :AAS-MIDS
(AAS NN+1 ,

830 IF US-RI6HTS (OPS. 1) THEN 320


840 NN--1 FOR J-0 TO 9:IF US-PU
:

S (J)THEN NN-J
650 NEXT: IF NN<0 THEN 320
860 R-R ORPU(NN):IF US-AAS THEN
1140 ELSE 810
870 K2-3:C-INSTR(ADS.".") :IF C-
0 THEN 1040
880 IF 0PO30 AND 0PO31 THEN 9
50
890 NN-INSTR (ADS. ","): US-LEFTS
ADS.NN-1) :GOSUB 930 Nl-H-1 IF H : :

=0 THEN 320
900 US-KIDS [ADS. NN+1) :GOSUB 930
:N2-H-1:IF H-0 THEN 320
910 IF(8ANDN1)<>(8ANDN2) THEN 3
20
920 R=16*Nl+N2:K2-l:GOTO 1140
930 FOR J-l TO 12:IF XS(J).-U3 T
HEN H-J
940 NEXT RETURN :

950 C2-C+l:FOR J-0 TO 12:L-LEN(


XS(J>>:IF MIDS(ADS.C2.L)OXS(J)
THEN 980
960 IF (B ORV(J)) AND 239<239 T
HEN 320
970 C2-C2+L:B-B AND V(J!:IF KK
Jl THEN K2=KK(J)-1
960 IF J-9 THEN J2-C2 C2-C2+ (C2 :

-1)«(K2<6)
990 NEXT
1000 IF(15 AND B)-15 THEN B-B-6
1010 IF PS-3 AND J2<-LEN(ADS)AN
D K2<>7 THEN PRINT -ERRO DE IND
EXACAO":GOTO 330
1020 IF(K2-0 AND C>2) OR (MIDS(
AD3+" " J2 1) O" ") AND PS=3 TH
. , . .

EN PRINT " ERRO DE ENDEREÇAMENTO


rGOTO 330
1030 ADS-LEFTS(ADS.C-l) IF J2-C :

THEN R-0:GOTO 1060


1040 GOSUB 1860 IF NU-0 THEN 10 :

60
1050 IF PS-3 THEN PRINT" ENDERE
CAMENTO NAO ENTENDIDO"
1060 IF K2-7 THEN K2-3:GOTO 108
0
; " ); - ) " 1 :

1150 IF OP->0 THEN BV-OP/256:GO 1500 INPUT K:CLS


SUB 1220:BY-OP:GOSUB 1230 1510 K2-K/10:IF K2>N THEN K2-N+
1160 IF 80 239 THEN BY-B:GOSUB 1:N-N+1:TS(K2)-"":PRINT «480.
1230 1520 IF K2<.1 THEN K2- .

1170 IF K2-0 THEN 330 1530 IF K2-INT(K2) THEN 1550


1180 GOSUB 1200:IF K2 = Z THEN BY 1540 K2-INT(K2)+l:FOR K3-N TO K
=R/256:GOSUB 1230 2-1 STEP -1:T${K3+1)-T5(K3) :NEX
1190 BY-R-256*INT (R/256) :GOSUB T:N=N+1:TS(K2)-""
1230:GOTO 330 1550 Pl-1478 PO-P1 :

1200 IF PS=3 THEN PRINT " "; 1560 PRINT ê448,K;TAB(6)TS(K2)


1210 RETURN P9-P0+LEN (TS (K2)
1220 IF INT<BY)=0 THEN RETURN 1570 IF PKP0 THEN P1=P0
1230 P=P+1:IF PS=3 THEN POKE P- 1580 IF P1>P9 THEN Pl-Pl-1
1 255 AND BY
. 1590 P8-PEEK(P1) :POKE PI 63 AND ,

1240 BY-255 AND BY IF PS-3 THEN :


PB
PRINT RIGHTS("0"+HEXS(BY) 2) .
1600 P7=0:AS'INKEYS:IF AS-"" TH
1250 RETURN EN 1600
1260 IF K>N THEN CS-"END" RETUR :
1610 IF AS = RS THEN POKE P1,P8:R
M ETURN
1270 K1-K9+1:IF K9>-LEN (TS !K) 1620 IF AS-CHRS (9) THEN POKE PI
THEN CS-" FALTA MNEMÓNICO" RETU :
. PB: Pl-Pl+1 :GOTO 1580
RN 1630 IF A$-CHRS(8) THEN POKE PI
12S0 K9-K1:IF MIDS (TS (K) Kl 1 ) . P8: Pl-Pl-1 :GOTO 1570
1640 IF AS-CHRSI10) THEN AS = ":
. .

• THEN 1270
1290 IF K9>LEN TS (K) THEN CS-MI
í )
GOTO 1670
DS (TS IK) ,K1 .K9-K1) RETURN :
1650 IF AS-CHRS(94> THEN AS = " "
1300 IF MIDS(TSIK) K9 1 O" " T . . )
+MIDS(TS(K2) ,P1-P0*1.1) :P7=-1:G
HEN K9-K9+l:GOT0 1290 OTO 1670
1310 CS-MIDS (TS (K) ,K1 .K9-K1) :HE 1660 IF AS<" " THEN 1600
TURN 1670 IF P1-P0+1>LEN(TS (K2) ) THE
1320 IF K90LEN (TS (K) AND PS-3 )
N TS(K2)-LEFTS(TS(K2) .P1-P0)+AS
THEN PRINT RIGHTS (TS (K) LEN (TS , (
:GOTO 1690
Kl )-K9+l>
1680 TS (K2) -LEFTS (TS (K2) P1-P0) .

1330 K-K+l :K9-0 IF PS-3 THEN PR :


+AS+RIGHTS (TS (K2) LEN (TS (K2) -P
.
)

INT 1+PO-l)
1340 RETURN 1690 P1-P1-(LEN(AS)>0)+P7:GOTO
1350 XS-"" 1560
1360 IF CS<"A" OR CS>-"[" THEN 1700 PRINT 632,"":K-K+10:GOTO 1
1380 510
1370 XS-XS+LEFTSÍCS.l) :CS-MIDS( 1710 IF N=0 THEN CLS PRINT" NAD :

CS. 2) :GOTO 1360 A A APAGAR" FOR C-l TO 1000 :NEX


:

T: RETURN
1380 IF CS<>" THEN RETURN
1390 FOR Q2-1 TO VV:IF X5-ZS (Q2 1720 CLS PRINT" INTRODUZA NO DA
:

LINHA (LINHAS NUMERAD


) THEN 1410
AS DE DEZ EM DEZ)
1400 NEXT:VV-VV+1:2S(VV)«XS:Q2'
1730 INPUT K:K2-K/10
VV:RR(VV)-23000
1740 IF K2>N OR K2<1 OR K20INT
1410 RETURN
(K2) THEN PRINT" ESTA LINHA NAO
1420 CLS:M0TOR0N:PRINT 6161. "PO EXISTE": RETURN
SICIONE O GRAVADOH, PRESSIONE Q 1750 K-K2:FOR K3-K2 TO N:TS(K3)
UALQUER TECLA E APERTE <PLAY>." -TS(K3+1) :NEXT:N-N-1:PRINT «95.
1430 US-INKEYStIF US="" THEN 14 K*10;" ";TS(K) RETURN
:

30 1760 IF N-0 THEN PRINT " NADA A


1440 OPEN"I" #-1 "ASM" PRINT" C
.
,
:
LISTAR" FOR C-l TO 1000:NEXT:R
:

ARREGANDO PROGRAMA" INPUT |-1,H- :


ETURN
:FOR J-l TO N INPUT #-l.TS(J):N
!
1770 PRINT" INTRODUZA O NO DA
EXT:CLOSE #-1: RETURN PRIMEIRA E DA ULTIMA LINHA (L
1450 CLS MOTORON PRINT #161. "PO
! !
INHAS NUMERA-DAS EM MÚLTIPLOS
SICIONE O GRAVADOR APERTE < .
DE 10)"
RECORD> E PRESSIONE QUALQUER 1780 INPUT K,K2:K-INT(K) K2-INT :

TECLA." (K2) :K1-K/10:K2-K2/10


1460 US-INKEYS:IF U$-"" THEN 14 1790 IF K2>N THEN K2-N
60 1800 IF KK1 THEN Kl-1
1470 OPEN"0".*-1."ASM-:PRINT" G 1810 IF K2<K1 AND K2-N THEN RET
RA VAN DO PROGRAMA": PRINT |-1,M:F URN
OR J-l TO N PRINT |-1 TS ( J) NEX
: , !
1820 IF K2<K1 THEN CLS:PRINT "
T:CLOSE |-1:RETURN CONJUNTO DE LINHAS INVALIDO" :GO
1460 PRINT #-l,N:FOB J-l TO N:P TO 1770
RINT#-1,TS(J) NEXT CLOSEI-l RET
: : :
1830 CLS:PRINT ê96.;:FOR K3-K1
URU TO K2:PRINT K3M0" "TS(K3):NEXT
1490 PRINT " INTRODUZA O NUMERO 1840 RETURN
DA LINHA (LI NHÃS NUMERADAS DE 1850 K-K2~K1:K1-K2+1:K2-K1+K:IF
DEZ EM DEZ) N-0 THEN 1760 ELSE 1790
Illlllllll IIIIIII

1860 NU-0 R-0 : usado, o programa comunica: "origem


1870 S-l não encontrada".
1880 1F ADS-" THEN HETURN Normalmenic, são utilizados os mne-
1890 XS-LEFTS (ADS. 1) BDS"MIDS (A
:
mónicos padrão do 6809. Números he-
D9,2):IF XS-"*" THEN R-R+P*S:AD xadecimais devem ser precedidos de $
S-BDS:GOTO 1870 (cifrão), números binários, de °/a (por-
1900 IF XS-"+" THEN ADS-BDS:GOT
cento). Algarismos sem prefixo são con-
O 1860
1910 IF XS-"-" THEN ADS-BDS S :
— siderados decimais.
S:GOTO 1880 Alguns Assembler para o TRS-Color
COMO ENCONTRAR ERROS EM
1920 Q=0:IF XS<>"*" THEN 1950 reconhecem códigos ASCII, se estes fo- PROGRAMAS LONGOS
1930 IF BDS>-"0" AND BDS<"2" TH rem precedidos de ' (apóstrofo) ou I Mesmo o programador mais expe-
EN Q=Q.*2+ASC(BDS)-48:BDS = MIDS<B (ponto de exclamação). Não é o caso de riente terá problemas em digitar progra-
DS .2) :GOTO 1930 nosso programa. Assim, o comando mas longos como esse Assembler. Não
1940 R-R+íi*S:ADS-BDS:GOTO 1870 FCC, que manipula caracteres ASCII, importa a destreza de seus dedos: ta
1950 IF XS<>"5" OR BDS<"0" OR B não pode ser usado. talmente, em algum lugar, um erro se-
DS>"F" THEN 1980 cometido.
1960 Q2-VAL("iH- + LEFTS(BDS,D) Para editar linhas, empregue as teclas rá
:
Muitos desses erros são encontra
BDS-MIDSÍBDS.2) 0=0*16+0.2 XS-LE do cursor. As setas "direita" e "esquer-
: :
dos quando se confere a listagem. As
FTS(BDS.l) da" movimentam o cursor ao longo da mensagens de erro do micro ajudarão
1970 IF<XS>"/" AND XS<":"> OR t Unha; a seta "para cima" insere e a se- também, se procurarmos saber o que
XS>"ê" AND XS<"G") THEN 1960 EL ia "para baixo" apaga. significam.
SE R=R+2*S :AD3-BD3 :GOTO 1870 A última linha do programa deve ser Tais mensagens, contudo, podem
1980 IF XS<"A" OR XS>"Z" THEN 2 END; o Assembler criará uma linha des- não ser suficientes para detectar o lo-
010 se tipo, caso esqueçamos de fazè-lo. cal de um erro em um programa muito
1990 C3-ADS:G0SUB 1350:IF C$<>" longo. Nesses programas, uma linha
Se, depois de digitarmos uma linha,
GOSUB 1390 pode ser executada sem problemas
2000 R-R+RR(Q2)"S:ADS-CS:GOTO 1 pressionarmos outra tecla que não EN-
muitas vezes, só vindo a provocar um
TER, o programa voltará ao menu. Se
870 erro quando uma variável assumir um
2010 IF XS<"0" OR'X3>"9" THEN R então pressionarmos L, os mnemónicos
valor incompatível devido a um erro de
«0:NU-1:RETURN serão listados para uma conferência. digitação cometido em outra parte do
2020 IF ADS>"/" AND ADS<":" THE Caso haja algum erro, retorne ao me- programa.
N Q-0*10+ASC<ADS>-48:ADS=MIDS(A nu e pressione E. Especifique então o Felizmente, o TRS-Color conta com
DS.2) :GOTO 2020 número da linha a ser corrigida. uma função de rastreamento — frace
2030 R-R+S*Q:GOTO 1870 Se quisermos inserir uma nova linha — ,
que facilita a localização de erros.
entre duas já existentes, devemos entrar Tal função é ativada pelo comando
no modo de edição e dar a ela um nú- TRON. que deve ser usado no modo
COMO FUNCIONA 0 PROGRAMA imediato,sem número de linha. Quan-
mero intermediário. Uma nova listagem
do rodamos o programa, ela nos mos-
mostrará a nova linha no lugar correto,
tra o número da linha que está sendo
Não se esqueça de reservar um espa- sendo que todas as linhas terão números executada.
ço suficienie dc memória para seu pro- múltiplos de 10. Apenas uma iinha de ca- Para desativar a função de rastrea-
grama, usando CLEAR antes de da vez pode ser inserida dessa maneira. mento, use o comando TROFF.
rodá-lo. Para apagar uma linha, retorne ao
Para introduzir o seu programa pres- menu e pressione D. Especifique então
o número da linha a ser apagada. Quan- é igual ao endereço inicial. Agora pode-
sione a tecla E. Ele pedirá então um nú-
mero de linha. Neste programa cada ins- do não houver mais modificações a fa- mos montar qualquer programa a par-
trução em mnemónico deve ser introdu- zer, retorne ao menu e pressione A. O tir de sua listagem em Assembly.
zida em uma linha de BASIC. E preci- programa em Assembly será então "mon-
so também que os números de linha se- tado" na memória. Quando o processo UM TESTE
jam múltiplos de 10 e cada linha conte- terminar, o endereço final do programa
nha apenas um comando Assembly com em código será mostrado na tela,
seus respectivos operandos. A opção de gravação —
tecla S — Para testar o Assembler, digite o pro-


A primeira linha deve abrigar o en- grava apenas o programa em Assembly grama de deslocamento da tela para a
dereço inicial da porção da memória on : ou programa fome. Para gravar o As- direita apresentado na página 219. Esse
de será colocada a rotina em código. E sembler, use o caminho normal. Para programa resultará nos seguintes
necessário que esse endereço esteja na gravar o programa cm código —
ou pro- códigos:
área reservada por CLEAR. Para espe- grama objelo —- é necessário sair do As- 8E 06 00 E6 82 34 04 C6 IF A6
cificar sua origem, usamos o comando sembler usando a tela BREAK: 82 A7 01 5A 26 F9 35 04 E7 84
ORG seguido do endereço inicial. CS AU EM "NOME" , INICIO, FIM, 8C 04 00 2E EA 39
Se um endereço inicial não for espe- DEFEXEC
cificado,o programa tentará posicionar Em algumas das máquinas compatí-
o Assembler a partir do endereço 35000, NOME é a denominação do progra- veis com o TRS-Color é possível aumen-

que pertence à memória ROM. O resul- ma; INÍCIO o endereço inicial defi-
é tar a velocidade do programa acrescen-
tado não será satisfatório, uma vez que nido por ORG; e FIM, o endereço final tando POKE 65495,0 no início da linha
não se pode colocar códigos na ROM. fornecido pelo programa após a 180. Se isto for feito, devemos modifi-
montagem. car outras linhas a fim de que a alta ve-
O programa procede assim para evitar
que o Assembler seja colocado em uma O último número, DEFEXEC, diz ao locidade não prejudique a gravação em
TRS-Color por onde começar a execu- fita. Assim, adicione POKE 65494,0 ao
prejudicial ao funcionamento da
em início das linhas 1420 e 1450.
Fárea tar a rotina código. Geralmente, ele

Você também pode gostar