Escolar Documentos
Profissional Documentos
Cultura Documentos
1
VO iR CtVITA
REDAÇÂO
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
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
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
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 :
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
. . . , ,
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\\\\
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-
40 FOR X=l TO 10
50 NEXT X
-
60 PRINT 6192+N." :PRINT §22
programa seguinte utiliza caracte-
4+N," " PRINT 6256+N,"
:
»
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)
(
IIIIIIIIIIIUMM^u^k^mMHHIIIIIIIIIII
152 131
158 128 128
D
II
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:
por caractere).
")))": PRINT§514 "
15 FOR L=l TO 15
.
) )
)
17 NEXT L MG
20 PRINT e450."000<":PRINTe386, de posições @ na tela também é maior:
ÍTCT1 130 174 128 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.
"
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
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
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
"
*
r
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
a 21).
Assim, por exemplo, onde esiá escri-
to, no programa para o MSX:
DD
LO LET X=RND (0)
< RETURN > - dependendo do seu com-
IIIIIIIIIHHH^MHHMMBHIIIIIIIIIII
il • ^iiiiBS 1
Agora
LISTAGEM DO PROGRAMA
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
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-
70
IF G - X
"S
1
=
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:
"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
!
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 ,
50 GOTO 10
DD
10 PRINT 1
20 INPUT AS
30 CLS
40 PRINT "OLA. ";A$:PRINT"EU TE
NHO ALGUMAS PERGUNTAS PARA VOCE
; ;
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
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-
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
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-
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 " "; :
"
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
:
I ARUCAÇÕeS I
560 GOTO 30
700 LET TA-(LL-L)/2+T:IF TA<T T
HEN LPRINT CHRS 13) PRINT "ERRO ( :
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 +
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))
(
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
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
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
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
)
( , . ,
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 '(
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 !
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
!
:
70 M-M-64
80 IF M>0 GOTO 50
90 GOTO 10
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
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.
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 ; :
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 -
;
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
;
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 ,
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- ,
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 .
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.
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 {
1O001O01 = 137 1 OO ) 1
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 é :
140 AS-INKEYS
150 IF AS-"S" THEN 10
160 IF ASO"N" THEN 140
170 END
HE]
PRINT "CONVERSÃO DE
\ 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.
ar APRENDA A UTILIZAR 0
COMANDO IF...THEN...ELSE
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
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 .
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 .
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-
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
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 :
10 INPUT IDADE
PRINT
20 IF I DAD E < 1 8 THEN
"MENOR DE IDADE" ELSE PRINT
"ELEGÍVEL"
10 INPUT IDADE
20 IF IDADE<18 THEN PRINT
"MENOR DE IDADE" GOTO 30 :
25 PRINT "ELEGÍVEL"
30 ...restante do programa
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. . .
"
"
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.
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
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.
.
3 PROGRAMAÇÃO DE JOGOS 3
O
.
PLOT 2«J+1.2*I:
PLOT 2 ma forma, seus contornos estão conti-
tém o número de pontos "comidos". A :
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 (
COMANDO
0 GRAVADOR
DE GRAVAÇÃO
VERIFIQUE SUAS FITAS
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-
.
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
mu DIGODÍMAQ
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
CLS 0
PRINT #11."BIN.DEC.HEX";
PRINT £68 "BINÁRIO"
,
DECIMAL:
110 PRINT 8227 "+ .
+ + + 60 PRINT AT 10.5:"+ +
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
:
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
:
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 ;
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:
205 C - C / 2 ,
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, .
E OS PON
COMO INCORPORAR AO JOGO
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
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
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
4 PROGRAMAÇÃO Dl JOGOS 4
PO+1:GOTO 210 0) + 1
160 IF K$-CHR$|30) THEN LET PO- 100 LET PY - INT RND (lí * (
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-
'
: "
li-
D 270 IF M = PO THEN PRINT gPO,"
"
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
; ;
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.
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
.
;
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
RECORDE DE TEMPO
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
4 PROGRAMAÇÃO Di JOGOS 4
TEMPO DE REAÇÃ0
m
20 CLS
Existe algum limite máximo para
ríodo de medida de tempo?
pe-
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
um programa que o A
SUASCOLECÕES aqui
a colocar
ajudará
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
EXAMINE OS REGISTROS
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
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.
:
CHEIO
;
'
3050 IF OP-2 THEN LET D-D-V C :
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
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
:
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
: (
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 :
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 , :
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
LINEINPUTAS (NR N) ,
: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) .
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 !
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
:
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 :
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
: ; : :
2060
:
IF AS (NR N) - AND N - .
"
SO"N"THEN8010 80 PRINT
n
HTAB 10: PRINT 5 :
1 THEN NR - NR - 1 BETURN :
8020 IFINS-"N"THENRETURN
.
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
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
;
NEXT RETURN
:
>";: INVERSE : 8040 :
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
"
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 ;
:
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 : : :
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 :
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
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
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 " !
170 STOP
";AS:G0TO 170
90 GOTO 5 160 PRINT "OLA, " AS " EU SOU :
;
.
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 :
:
,
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
.
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
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
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)
,
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 : :
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 :
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
,
3 APLICAÇÕES 3
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- :
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
:
4046 IF K-R OR AS(K.V)-" " THEN T AS (D) -AS (D+V)LET D=D+V GOT: :
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
: :
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
; :
^
ASÍX + l.Y) NEXT NEXT : :
4060 NR - NR - 1:D - NR IF D - :
4070 RETURN
5000 DD - 1: PRINT FOR X - 1 :
r
TO A: PRINT HTAB 10: PRINT X; :
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. .
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
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
:
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
i
4 CÓDIGO DC MÁQUINA 4
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
:
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-
+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-
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
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
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 .
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
.
RUZEIROS"
150 IF INKEYS- "F " THEN RUN
200 GOTO 100
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,
,
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
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
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
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
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
!.A:NEXT J
GET (0,0)-(4,4) .BO.G
I
85 GOTO 85
260 DATA 32.112.248.112.32
(17B>+5
100 PCLS
110 CIRCLEU27.95) 12 5 DRAWBM . , :
127,95 :C5S4BNUNLNDNR"
115 GOTO 115
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
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
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
( :
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-
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)
:
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
115
;
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. , ;
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 ! . ,
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
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
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
: ,
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
,
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-
:
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
-,
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
:
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 .
RETAS CRUZADAS
20 pmode 3,1
30 PCLS
40 SCHEEN 1.0
50 LINE (0.191)-[255.0) 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 ,
,
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.
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- ;
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
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
, ,
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) .
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)
: , ,
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
:
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
As linhas 8000 a 8030 formam dois 55,255,255.255,255,255,255,255, :PSET (BX ,BY) 1 PSET (BX + 2 BY)
, : . ,
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
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: :
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
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
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
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
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 ,
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 :
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
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
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 .
40 DATA MANUTENÇÃO DA CASA. LAZE 1250 PRINT 6448," ": PRINT 6449.
H ALUGUEL VESTUÁRIO AUTOMÓVEL
. , ,
1 RETURN
:
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
:
< ENTER > ou < RETURN >, após 1010 GOSUB 1160 M (NN) TT-TT+AM (NN)
: ;
Ill
•
l Í";DAS[M) i
{CA(M> ) 3) ,
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
; :
"
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 :
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 :
)
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
"
)
"
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
TO LEN f$> THEN GOTO 6190 RAMA" 1240 NM-VAL (CAS) F-l RETURN : :
)
0,4000.5000.6000,7000 2020 NEXT
6220 RETUHN 110 COLOR 15,4,4:GOTO60 2030 TT-0 LOCATE1S 23 PRINT"Qua
: , :
51} "QUANTIA"
;
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
:
2300 FORN-3TO20
2310 VPOKEN*40+10.22:VPOKEN*40+
;;( F
L :
*
" ;AM(N)
, CA(N) ,
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 . , .
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
; :
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
;
:
;
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 :
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 :
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
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) "+"
.
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) ) )
, ;
(1)099
BRIGHT 1;AT 12,21;"+1" 140 FOR N-l TO 8: LET A[N)-0 210 PRINT AT 18.0; "
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"
;
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
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
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" ;
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;
;
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
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 " ;
;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" ,
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
[
90 PRINT
mento do cursor, a função TAB é, cer-
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. :
"
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
:
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
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 ,
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 '
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
: ,
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
;
.
re e do recorde (ambos inicialmente
0), ao passo que a linha 260
— em
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-
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 * ( )
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-
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- , ,
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.
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.
" " (
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).
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-
:
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-
.
RAMACAO BASIC
QQE
:
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
( )
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:
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- .
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!
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 :
* 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
.
)
:
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
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
'
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
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
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
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
nax - xmin
onde:
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
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- ,
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
"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
:
"
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
:
; PAPER l;zS(n) 9
3250 NEXT n 60 NEXT
3255 LET dc»l 80 PRINT PRINT PHINTTAB (20) "O PÇ
: :
)
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 :
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 (
3060 NEXT 100 ON VAL (BS) GOTO 1000.200 * ABS (Hl) + SGN (LO) - - (
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) (
DULO DE EDICAO" ,
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
>
DEFINIÇÃO OE UM SPRITE
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
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á,
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
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
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 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
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*
.
Os nomes são
,
imas
20 FOR n-1 TO 6
30 INPUT aS tn)
40 NEXT n
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-
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:
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
ç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 : :
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
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
:
IIIIIIIIIIMMI ACÃOBAS
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
' '
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
:
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)
TIPO DE ANIMAL"
705 PRINT TAB 5); "LISTA DE T 1
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 .
ACÁO BASIC
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 '
910 INPUTA
GOTO800 915 PRINT PRINT:
1030 FOR j-1 TO r USOS PARA AS MATRIZES 35 REM NOME P/ GRAVAÇÃO CREP01 :
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
, ,
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. ,
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 ||||||||||
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
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
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é
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-
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
. 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 ...
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.
" " " .
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 :
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
desenvolvimento do roteiro e a
confecção do mapa dos locais.
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-
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
:
-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
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 :
ção ALÔ! ser traçada: tabeleça a cor por e o C tamanho por S. U2LBE2BR D4BR3U2NL3U2BR2 ND4BR2
, ,
D2NL3BE2 NR3D4R3NHU4BR2
,
20 PCLS para cada mensagem quando se quer exi- U2L3U2R3BR2 RND4RBR2 D4R2U4BR2
, .
40 OIS-"D4R3U4L3BRSD4R3BR2U4R3D Para simplificar a tarefa, defina to- 100 DATA DF2DBL2UE2UBR2 DFND2EU ,
50 DRAM "BM110,SO;C358"+OIS do um programa como o que se segue: 110 DATA NR2D4R2U4BR2 BDEND4BR2 ,
rística
BD4REU3L2R3BR2 D2ND2NF2E2BR2 —
opera em um cordão de instruções, vo-
,
,
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-
,
manho. A
linha 130 coloca em AS uma
nha aparecerá no desenho quando uma
.
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 ;
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
:
( 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
:
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 -
B80
830 IF K2 - O THEN 280
840 GOSUB 850 :BY R - 256 *
INT (B / 256): GOSUB 990 BY - B :
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
NEXT !
!
!
10 org 800 CALL 800
PRINT D3; "CLOSE* AR3 RETURN ; :
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
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 :
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 í
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 ;
;
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 " !
"
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
*
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 " .
20 LOCATE 5,2:PRINT"
TO )
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) ,
150 GOTO 150 ficar uma entrada feita pelo teclado. Se (TS LEN (TS) -PO-LEN (US)+1)
,
(TS.LEN(TS)-P0-LEN(WS)>1)
80 P-PO+LEN(NWS)
90 GOTO50
100 PHINTTS
110 GOTOZO
Illllllll MIM!
Um programa que calcula a dimensão dos
EMBIEIR PARi saltos e faz a tradução dos
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
,
,
.
. ,
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
í íí~*'
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
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- . .
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
, . ,
,
, ,
, ,
.
, ,
.
,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".
,
, , . ,
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
'"
-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
:: ::
-aS(j+l TO )
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 :
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
)
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 ) :
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.
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
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
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
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
:
0*>
(6*
6 APUCAÇÓtS 6
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"
;
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"
!
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
, : :
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"
. .
GALHAS. JAL
A" "HA" "AGA" "HAJA" "HALL" "GA
, , , , ,
1IIIIIIIUM! ' «
III
: :
6 APUUÇÕIS 6
1160 RETURN
9000 DATA FADA, SALA. ADAGA, DADA,
FACA FA GALA HAJA AGA HALL ALAD
, , , , , .
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 :
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
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)
. .
.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ó-
lê
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
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 ,
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.
LET LA-0
270 REM **POSICAO INICIAL*"
280 LET L-15
290 GOTO 330
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
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 :
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
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 , .
fileira de cima do teclado: a chamada fi- 2010 DATA "TULIPA", "PIOLHO", "IO
L P
7 APLICAÇÕES 7
"QAWSEDRFTGY
, .
JOLO
.
.
.
,
.
.
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)
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
. ,
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
. . . . .
D| CIT
E
#
JftCft
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 :
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*
. , . .
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
, , . ,
ACRESCENTE NÚMEROS
A TECLA <SHIFT>
DESENVOLVA UM RITMO
REGULAR
VELOCIDADE E PRECISÃO
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 ,
:
" ,Z80A, RELAXE. 6502. A37XZ. -1024
" "30123" "CONGELADO" "4MHZ" "W
. , . ,
VASTO, JUNCO
do. Até agora, porém, não tocamos nas .
8 APLICAÇÕES 8
liarizar bem comos exercícios originais. 330 PRINT AT 10 RN*1 "*" .LET;
: ;
- ;-; Sucesso Bei ja- flor Lusar
; , , .
"
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 :
8 APLICAÇÕES 8
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
,
,
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
:
40 LET aS-aS+"1234567890!6ISt
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
.
;
;
^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
;
;
APÔS O BIP"
CLAS POB MINUTO" 310 LOCATE15.10:PRINTSTRING$<4.
920 PRINT"VOCE EREOU" EH "DAS 3 219)
;
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
, :
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-
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
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-
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- .
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
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
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
IIIIIIIIIIIHI » cODKootiuaum ,2
lllll
Bem mais rápido do que o programa para
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
.,
. ; :
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 :
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 :
GOTO 1040
780 IF RIGHTS {ADS D "" ) " THEN A .
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 :
-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
. , . .
60
1050 IF PS-3 THEN PRINT" ENDERE
CAMENTO NAO ENTENDIDO"
1060 IF K2-7 THEN K2-3:GOTO 108
0
; " ); - ) " 1 :
• 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) .
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 :
T: RETURN
1380 IF CS<>" THEN RETURN
1390 FOR Q2-1 TO VV:IF X5-ZS (Q2 1720 CLS PRINT" INTRODUZA NO DA
:
—
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