COusWlor Edllorial Rf:SjlOIl~ Dr, Rtnalo ~l I. SabbalJnl
(DirelIr m 'ilcJ.eQ de InI'nnruIJica da Unfl'tlSid.ldt Esmdwl de Campirw) EmcnQIo Editarial: DATlIQUFSf AsliesscriJl ern Inform<ltica UM. Carnplll1l!l, SP
T~ adap~ prog~ e redaplo:
Ahillo ~ 'eto, A1uisio 1 Dornellas de Barros. ~1aree1o R. I"IJ'eS ~ MillIcm HUiISG!r Velasco, Ralll N1!det FbrrelIi, Ricardo L P. de Aquino l'erelCil ~ Ge.ra!: Rejane FMi2A1tlSahbatlrrl
cmlERCIAl.
DUmr: ROOei1J}Slhm
Ge:reote ComerdaI: FJ;ivfo M!lOJlilll Gmmle de CJn:ulac;lio: lJel1kse Mn~.ol
Geren!e de l'ropagandde PuliUmJade: J~ Ms MadIa 1Jm!ni! de I'esquisa e AMl.bie de r.lercado;
W~ M. P. aIloco de Araujo
~----lCLC1-----
A Eciilora ova Cultural lnla, e lima ernpresa do Crupi) C;U: - Comunit'.a~. lazer, Cullum S.A Presidenle: Richerd Civila
Um editor masical 3 1421 Organizal;ao de projetos 1451
Urn ladexador de programas 146,1
aJIHGODI MAQuINA
As cinco vidas de Willie 1208 Avalanche: ponlos ganhos U28 Avalanche: as cobras viveml 1241 Avalan.che: comeca 0 jogo 1271 Avalanche: listagern eompleta 1292
A terre de Babel 1188
Programa ern LOGO 1314
o LOGO ea tartaruga 1326
LOGO: alem da tartaruga 1341 Sprites em LOGO para 0 MSX 1426 Programacao em Pascal 1436 Bstrururas do Pascal 1446
PERlFt.ICOS
Ro.b~s controlados PO[ computador MUSIC'B, nncros e MIDI 1306 Computadores que ouvem 1311 Controle por coinputador 1321 Processamento de imagens 1470
1284
Compressao de melodias 1201 Operar;oes oom eadeias 1214 Tecnicas de recursae 1221
o sistema operaeional 1246
Como lidar com arquivps 1252 Controle a entrada de dados U59 Opera5oes com datas 1179 Dlvertimentcs matematicos 1301 Os segredos do TRS·80 (4) 1312 Os segredos do Spectrum (2) 1340 FUTII;OeS poderosas 1347
Papel, pedra, tesoura 1348
A IDatematica,da irregularidade (1) Domine 0 video do MSX 1361
A matematlca da Irregularldade (2) Bits e bytes em BASI C 1378 Desenhos em perspectiva 1391 Formata~ao de telas 1396
Mais oper3coes com cadeias 1401 Os segredos do TRS~~m (5) 1412 Retinas em codigo de maquina (2) Formatacao de valeres 1440 Imprirna seus desenhos 1441
PlOGIAMACAO DE JOGOS
,
1356 1372
1419
Os dados VaG rolar 1234
o pintor aloprado 1217 Cornpressao de textos (1~ 1332 Compressa.o d,:e textos (2 141,,4 Compressao de textos (3 1428
SpfflrlO ge,:aI1471 8zmuido dQS Quadros 1479
Processadores de textos IlSI [ndice remissiva 1481
Troca de mensagens l404 Errata I
Ciere:nciamento de banens .de.dados. _JIL"!4!!J6r:t4~~ •
E
PROGRAMAQAO DE UMA MELODIA
• COMO COMPRIMIR as DAD OS
• OIVISAO DA MUSTCA
• ECONOMIA DE NOTAS
.1 MODIFICACAO DO ANDAMENTO
AmpUe ,3 capacidade musical de seu micro red uzil'l do, os dados necessares a e')[ecu~ao de ums melodia.
As tecnicas apresentadas aplicam~se a compressao de diferel1ltes tipos de dados,
Tocar musica utilizando 0 computadar e uma experiencia fascinante, principalmente quando se e 0 auter da peca. Existem, porem, varias dificuldad
a uperar, e uma dela e a quantidade de dados que urn programa requer para exeeutar deterrninada melodia - mais de uma tela chela de numeros, na maioria dos casas. Alem de serem dificeis de digitar, esses dados ocuparn multo espace na memoria. Neste artigo, voce ve-
ra como cornprimir os dados de suas melodias dentro dos programas BASIC, de maneira que eles tomem Q menor espace possfvel, Iiberande parte da memoria RAM para outro uso.
A aplieaeae das tecnicas de compressao de dados DaO se res ringe, naturalmente, 80S programas destlnadcs a execucao de rmlsica. Bstende-se a dados de todo tipo, desde que sejam repetitivos e limitad as a certos vatores.
UMA NOVA MHODIA
Seja qual for seu e tilo, as melodias que 0 computador toea eguem urn cer[0 padrao que permite sua com pressao. Tomemos como exemplo urns musics simples, com urn total de doze eompas-
sos. Para executa-la, preci aremos escrever urn programa em BASl C contendo um determinado numero de linhas DA· TA. como 0 apresentado a seguir:
10 LET T".2
20 RESTO,RE 100 ]0 RE.AD D
50 IF D-255 THEN GOTO 20 60 SOUND T.D
70 OOTO 3D'
100 DATA 12.12.15,16.19.19.2'1. 19
110 DA'TA 12.24.22.21.19.17 .16. 14.
120 DATA 12.12.15.16.19,19.21, 19
130 DATA 12.24.22.21.19.17,16. 14
140 DATA 17,17.20.21,24,24.26.
24-
1.50 DATA 17,24,22,21.19.17.16.
14
16[1 D1\TA 12.12,15.16.19.19.21.
19
17D DATil>. 12.24.22,21.19,17,)5,
1'l
1,BO DATA 19.19.23.24,26.26,24,
23
1'90 DATA 17.17,20.21.24.24,20.
21
200 DATA 12.12.15.16,)9.19.21,
19
210, IllATA 12.24,22,21.19.17,16,
14
220 DATA 255 10 BOUN,O 7. 56·: SOUND a,!L 5 20 SOUND 1.0: ,RESTORE
3,0 READ D
so IF 0=2.55 TIUN 20' 60 SOUND 0,0
70 FOA T=O TO 100: NE,XT: GOTO 30 100 DATA 213,213.179.169,142.14 2.126,142
110 DAT'A 213.106.,119,126,142.15 9.169,189
120 OAT,AlI3, 213 ,179.169,.l42 .14 2.,126,,14.2
130 DATA: 213 ,106 ,119,126,142.] 5 9,169.189
140 DATA 159.159,134.126,106.10 6.94.106
150 DATA 159.106,119,126,142,15
9.169,189
160 OATA 213.213.179.169,.142,14 2,126,14.2
170 DATA 213.106.119.,126.14.Z,15 9,169.1B9
ISO DATA 142,142,112,106,9<1.94,
106,112
190 D.A.TA. 159.159 .1J"1.126 .106,10 6,134,126
zoo DATA 213.213,179.169.142,14 2.126,142
210 DATA. 213,106.119.126.,142,15
9.169'.189
220 DATA 255'
10 AES,TOllE : T = BO
20 FOR I '" 0 TO 22: RE.AD A: PO KE BOO + I.A: NEXT
14.0 DATA
,23
1501 DATA
,42
160 DATA
8,31
170 DATA
7,42
180 DATA
.25
190 DATA
.28
200 DATA
B,31
210 DATA
7,42
220 DATA
ii 111111
35.35.29,28,23,2).21
35.23.26,28,31,35,37
47.47.40,37,31,31.2
4.7,23,26,28,31,35.3 31,31.25.23.21.21.23
35.]5,29,28.23,23,29
47.47.10,37,31.31,2
47.23.26,28,31,35,3
255
10 T-3
20 R£SrORE 30 READ 0
SO IF 0-255 THEN 20 60 SOUND D,T
70 OO"TO lO
100 DATA 175 • .175,lB9,193,204.20 4.210.204.
110 DATA 115.219.213,210.204,19 7,193.1SS,
120 DATA 175.1175.1S·9,19.J,204,.ZO 4.210.204
130 OAT.A 175.218,213,210,204.19 r .19'3.195,
140 DATA 197.197.207, 211:1,218, 21 B •. 223 e . 218
IIIII1II
III
1111
150 DATA 197.21<8 .• 213.210 .• 204.19 '.193.185
160 DATA 175,175.189,193.204.,20 4.,210.204
17() DATA H5,218.213 .• 210,.204:.19 7"JL93.18S
180 DATA. 204.,204,216,.218,223.22 3.218,216
190 OA.TA 197.,197,207,2lO,218.21 8,207,210
lDO DATA 175.175.169.193,204,20 4..210.204-
2.ILO DATA 175,218.213,210,204,.19 7,,193.185
220 DATA 255
Se quiserem, os usuarios do TI{,2000 pederao modiflcareste e os preximos programas a fim de usar 0 comando SOUND .. Mas isto nao e necessario: tal como estao, os program as funcionam tao bern em seu micro quanta no Apple.
Em geral, 0 MSX requer 0 dobra dos dad os utilizados pelos outros micros, j·a queemprega dois bytes para definira nota musical - 10 byte mais significativoe 0 menos significativo. A melodia que escolhemcs, 110 entanto, e tao simples que 0' byte mais slgniftcativo de todas as suas notas e igual a 0, 0 que nos permlte especificar so os bytes menos significativos.
A variavel Te!itabelece urn fator de tempo para a velocidade da musica, A
linba 20 acerta 0 apontador das notas 0.0 infcio dos dados, 0 laco FOR ... NEXT entre as Iinhas 30 e 70 Ie os val ares das notas - as numeros nas linhas DATA -. coloeando-os dentro do comaude musical apropriado na linha 60. A linha 50 detecta 0 fim da melodia, marcado por urn valor arbitrario-s- 255.
Se qulsermos introduzir pausas no mei.o da melodiar podemos definir urn outro valor arbitnirio.254 por exemplo, e incluir urn teste para esse valor na Hnha 40. Ao surgir uma pausa no rneio dos dados, a Iinha 40 desviaria 0 programa para uma outra linha. Esta produziria umcerto atraso, voltando depois para a linha 30a.f.tm de continuar a execUI;ao da rmrsica,
Tal como 0 program a esta, as notas sao fornecidas aos comandos musicals do BASIC e emitidas conforrne vao sendo lidas nas linhas DATA.
Emboraesse processe funcione a centento, ele exige unr numero muito grande de dados, mesmo para urna meIodia curta. Aleut de dificultar a digit a~Q e tornar espaco na mem6ria, Q excesso de dados traz ainda lim outre inconveniente: enquanto a rmisica esta sendo lida e prccessada, 0 computador nao pode se ocupar com outra tarefa,
Alguns micros, como 0 l\t1SX, solucionam parcialrnente esse problema com
urn buffer musical, capaa de guardar algumas notas, Se houver espaco no buffer para 0 sorn queesta sendo emitido, o computador e liberado para outras atividades, Porem, havendo mais notas a processar, 0 micro fica novamente comprometido. Seja como for, 0 buffer nao alivia 0 trabalho de digitacio das linhas DATA nem reduz 0 espaco per elas ocupado na memoria.
Para eontornarefetivanrente esses problemas, 0 usuario s6 tern uma alternativa: encontrar 11m meio de cemprirnir os clad os , tornande mais faeil sen processamemo e econornizando espacn.
MAos A OBRA
A compressao de dados e viabilizada pelaexistencia, em uma melodia, de padroes que se repetern. Quante mais padroes pudermos reconhecer i maier sera 0 grau die compressac,
Para identificar esses padrdes de dados, convem, em primeiro Ingar, ouvir ou tocar a melodia em urn instrurnento, tentando distinguir as passagens que se repetem, Depois, escrevaa mtisica em urn papel, preocupando-se apenas com a freqiiencia das notas - ignore pautas, elaves, compasses etc.
Nao ha dificuldadeem escrever, em
sequencia. as Jetras equivalentes as notas, se estas tem sempre a mesma dura~o. Mas. e se as notas tiverem duracao variada? Nesse case, 0 trabalho tornase urn pouco mais comphcadovpois preeisaremos levar em conta, alem da tonalidade, 0 tempo de cada uma - 0 que duplicara 0 volume de dados.
Dutra safda consiste em repetir as notas de maier duracao. Se, par exernplo, urna nota dura duas batidas, ela sera registrada duas vezes. Esta foi a alternativa que utilizamos ao transcrever a meIodia doprograma anterior. Obtivernes a seguinte tabela:
TABELA 1
o G A# B D D E 0 G
oz fED C B A
G G A# :fl D D E D G
G2FE nCBA
c C D# E G2 G2 A2 02 C
02FE DCBA
G G A# B D D E D G
Gl_fE DCBA
D D F# G2 Al .'\2 02 F# C C D# E 02 G2 0# E
o G A# B D D E 0 G
02FEDCBA
Se voce examinar a tabela 1 com atem;ao, vera que a melodia se campfire de apenas cinco sequenclas, ou minlmelodias - identificadas como Tl, T2. etc., como mostra a tabela 2 -, em sua maioria tocadas repetidas vezes,
TABELA 2
TI == a G A# B D D E D G
12= G2 FED C B A
13 == C C D'# E 02 G2 A2 G2 c T4 = D D F# G2 Al A2 G2 F#
T5 =: C C D# E 02 02 D# E
Podemos agora utilizar uma tecnica de compressac: as mfnimelodias nao serao digitadas sempre que aparecem na rmisica cempleta, mas uma wnica vez, j unto a codigos que espeeificam a se-
qtiencia ern que devem ser tocadas, Como eosmma ocorrer quando ccmprimimos dados, 0 programa que la a melodia assim digitada e maior que a anterior:
10 LET e-o: LET '-.2 20 IIESTORE 100
30 FORN"'l TO c-r. READ P':
NEXT N
40 IF p~o THEN OOTO 10 50 RESTOIlE P
60 READ N
70 IF N)=255 THEN LET C-C+l:
OOTO 20
SO SOUND T,N 90 COTO 60
100 DATA 110,120.110,120,130, 120,110,120,140,150.110.120,0 110 DATA 12,12,15,16,.19'.19.21, 19.12,255
140 DATA 204..204.216,218,223,22 3. 218 • 216, 255
ISO DATA 197.197,207.210.218.21 8.207,210.255
Note que 0 mirnero de dados necessarios para a execucao da melodia foi rnuito reduzido - no Spectrum, par exemplo, dlrninuiu de 97 para 59 bytes. Rodando 0 program a • voce vera que a musica e exatamente a mesma do programa anterior. Os usuaries do Spectrum via estranhar 0 andamento da melodia, mas logo terao umaexplicacao.
Os dados que definern as minimelowas estao nas linhas 1.10 a 150 e a seqtiencia principal- isto e, a ordem em que as minimelcdlas sao executadas - fica na Iinha 100. 0 laco na linha 30 acerta a valor de P (variavel de trabaIho utilizada na leitura das linhas DA'I A) de acordo com a sequencia principal; definindo a rninimelbdia a ser tocada. Na realidade, a seqiieneia princi-
III
IIIIIIII
pal IS uma lista de mimeros - au de vaLares que, combinadas corn urna eonstante, resultam em niimero de linhacorrespondentes as Iinhas onde se encontram as minimelodias.
Identificada a minimelodia a ser executada, a linha 50 calcula a numero da Iinha DATA correspondents. S6 0 Spectrum perrnite 0 usa da instrucao RESTORE durante a leitura do bloeo de dados. 0 Apple e 0 MSX ernpregam lacos FOR ... NEXT e 0 TRS-Color tern os pontes de entrada gravados na linha 3.
A linha 10 utiliza a variavel C para a contagem do nt.imero de minimelodias ja tocadas. A. duracao de cada nola e controlada par T, que tambem determina 0 andamento da musiea. A linha 40 (28, no Apple e no MSX) verifica a ultima minimeiod.ia, que e marcada com o na linha 100. 0 rnimero 255 assinala a final de cada minimelodia. Ao encontra-lo, 0 computador volta a sequencia principal para saber Quai sera a proxima minimelodia.
Existem varias alternativas para a di& ruao de urna rmisica em sequencia principal e minirnelodias. De IUm modo geral, quanto menores as minimelodias, maier e a equencia principal. Devemo buscar urn equilfbrio entre esses dais elementos, at Jim de evitar que rninimelodias muito curtas exijam uma sequencia principal tao longa que Mule as vantagens da compressdo.
DIVIDINDO PARA VENeER
A segunda teenica de compressao e ainda mais eficiente. Ela parte do principio de que, embora os micros possam tocar urn grande numero de notas - geralmente 256 -, poueas delas sao de fato utilizadas durante a execucao de uma melodia, Assim, nao nos interessa - e nao e economico - ernpregar urn sisterna planejado para aceitar urn grande mimero de notas.
Cada pos,ieao de memoria em seu mierocomputador de oito bits e capaz de armazenar urn ntimero inteiro entre 0 e 255. Restringindo a quantidade de notas a serem armazenadas, sera possivel eoloear duas dew em cada posi~ao - uma em eada quatro bits. Por exemplo, o numero binario 10100010, deoito bits pode ser inrerpretado como urn s6 valor decimal - 162 - ou como dois valores - [0 (1010 em binario) e 2 (0010 em binario).
Dividir por dois 0 espaco disponivel diminui drasticamente 0 intervale de valares que podemos armazenar: 0 a J 5. Conrudo, rnuitas vexes isso e suficiente, pois a numero de notas diferentes em
uma melodia simples raramente ultrapassa dezesseis,
Para utillzar essa tecnica de cornpres:sao. precisamos red uzir a mimero de notas a quinze, deixando 0 16? valor corno urn codigo de controle. J! comentamos que, quanto mais comprimidos os dados, maier e 0 programs necessario para interpreta-los, Aqui, 0. prograrna deve deci:frar cada nota abreviada que vai tendo nas Iinhas DATA.
o usuario, por sua vez, ted 0. trabaIho de selecionar as notas que serao usadas na melodia, classificando-as em ordem crescente, conforme a frequencia, a partir da nota mais haixa da primeira oitava - nesse caso, G1. Em seguida, precisara caJcular 0 numeros codificados que aparecerao nas lin has DATA. Nossa melodia inclui doze notas: G. A, A#, B, C, D, D#,E, F, F#, G2eAl.
Digite 0 terceiro programa e veja 0 sistema em acao.
12 GOSUB 1000: LET T=_15: LET NT= 130: LET M9=.17 0: r.ET MT- 21Q: GQSUB ]00
4S0 DATA 175.185,189.193.,197,20 4.207.210.213.216.218.22].0,0.0 .0
1000 DATA 1,2,1.2.3,2 ,1010 DATA 1.2.4,5.1.2.0
1110 DATA 0,35,85,117,15 1120 DATA 168.117, (ii7, 31,255 1130 D:A'FA 68.103.170,186.,79 114'0 DATA 85,154,187,169 .• 255 1150 DATA 68,10'3.170,1'03.255
Os valores das fIeqiH~ncjas dessas 110- tas estao codificados na linha 450 (100 no Spectrum). Bssa linha deve canter dezesseis valores. No MSX. poderfamos precisar de 32 valores para outras melodias, ja que ele requer dois parametres para um valor de nota.
Em todas as versoes, codificamos so doze notas; assim, quaere espacos sao preenchidos com O. Os quatre dlgitos binarios (chamados nybble) que formam cada nota. das mlnimelodias estao cedificadas nag linhas ]000 e lOW (200 e 210 no Spectrum). Para entender como se caleulam esses valores, tomemos como exemplo a miaimelodis TJ, Veja os mimeres da sequencia principal na Iinha 450 (100 no Spectrum). Charnernos a primeira nota dessa linha de D, a seguada de 1 e assim per diante, ate a ultima nota. que sera IS. Se escrevermcs a minimelcdia Tl com esses codigos, teremas TI == 0, D, 2, 3,5,5,7,5.0,,15. o numero 15', no caso, indica 0 final da rninimelodia, e mio uma nota. Cada um desses valores cabe em 'Urn nybble.assim, precisamos cornbina-los em pares para 0 bter os bytes.
o primeiro par de lI!ybbJes. e 0 e 0, valares que eorrespondem em binatio, a 0000 e 0000. Combinadas em urn byte, resultam no decimal O. 0 primeiro valor da linha DATA 1110 (210 no Spectrum), que equivalea TI, e, portanmO, o proximo par e 2 e 3 - em binario, 0010 e 0011. Combinadas, esses valores resultam em 00100011, au 15 em decimal. Este e 0 segundo valor da Iinha J 110 (ou 210), Procedendo dessamaneira com a minimelodia seguinte, teremos T2 = 10,9,7,5,4,3, 1, 15 .. Combinadas, as valores ]0 e 9 - 1010 e :1001 em binario - resultam 168 em decimal. Este eo prime-ira valor de T2na linha 1120 (220 no Spectrum).
Utilizamos esse metodo para calcular as valores correspondentes as minimelodies, armazenados aaslinhas J 110 a 1150 (210 a 25'0 no Spectrum). Como no programa anterior, a sequSncia principal (linhas 1000 e tOW. OIJl 200 no Spectrum) aponta para as, Iinhas DATA onde estaoas minimelodias, na ordem em que devem ser tocadas.
o PROCESSO INVERSO
Outra parte importante do programs e a que se enearrega de extrair os nybbles
MAIS MElODIAS
Como exarcleio. rsnte cedlficar outras melodies, utilizando 0 ultimo programa deste artlgo, ldantlflqua as minirnelodias e as seqOe.,cias prhncipais, calcuIe OS valoreSCOrf\l;lSP@!"Idel'ltes e 0010- que-es em linhas DAlA. Sera preciso reclefinir as matrizBS - XI' J - dasequt§ncia. principal par·a cada nova, melcdls, 0 que pode exig,ir a renumeraQao do programa.
dos numeros decimals lidos nas linhas !DATA. 0 Spectrum faz 1SS0 cclocando o valor em uma v aria vel (linba 401) e chamando, em seguida, uma sub-retina (linhas 600 e 610) que separa os dais nybbles do byte. Devidamente processad as, esses valores sao utilizados para emkir duas [Iotas.
Nos outros micros. as linhas 50 a JOO euidam da decodifleacao. Primeiro, 0 byte em exame, N> e armazenado na linha 50. A linha 60 extrai a nybble mais significativQ e a linha 70 verifica 0 codigo de final de melodia, A linha 80 charna a sub-retina que executa a nota corresponderue e a linha 90 extra! 0 nybble menos significative, usando a eperaeao logica AND (rnenos no Apple e no TK-2000, cuja fuw,;aa AND nao pennite 0 calculo de valores di fereates de 0 e 1). A notae entao emitida. Noteque 0' byte em exame e preservado, sem 0 que DaO seria possivel reeuperar 0 segundo nybble,
Ao executar esse prograrna, as usuarios do Spectrum observarao que as problemas de andamento causados pela compressao ja oio ocorrem, 0 defeito era provocado por um tempo extra de proeessamento, necessario ao realinhamento des ponteiros, ou seja.ao uso de RESTORE. 0 pro gram a reduziu esse tempo de processamento por meio de' uma retina lem c6digo, armazenada nas linhas 1000 a 2130. Bstae a raziio das diferencas de tamanho e numeraeao entre 0 Spectrum e os demais micros.
Para aJterar a velocidade de execuI,;ao., altere 0 valor de T. Ele fica na Iinha 12, no Spectrum, e na Hnha 40, nos outres eomputadores. Observe" porem, que 0 intervale de tempo entre 0 final de uma minimclodia e oinicio da seguinte toma-se mais aceatuado iI. medida que T diminuL
46 COD/GO DE MAQU/NA 46
AS COVIDAS
D WlL E
Mesmo Que voce seja urn exfmio iogador mais cedo ou.mais tarde a morte levant Willie. Mas mio se afobe. Ble tem cinco vidas - nem tantas como urn gato; bern mais, porem, do que os pobres mortals. Quando a fatalidade atingir Willie definitivamente, voce devera enterra-lo, imprimlr 0 placar final e ajustar todas as variaveis,
Os sons emitidos pelo Spectrum sao rnuito simples, acompanbando a execu~ao dos programas. 0 TRS-Color pede produzir sons sofisticados. Mas, como para is a e necessario utilizar a proce - sador, nao se pade tocar u m sorn e executa! 0 jogo simuJtaneamente.
A rotina apresentada a seguir promove a morte de Willie e verifica se ele pode ser ressuseltado.
10 REM 0.9 59155,
20 RE~ die Id de,196 30 REM Id hl,1086
40 REM call 94.9
50 REM ld de,I3l
60 REM Id hl,1646
70 REM call 949
80 REM dead ld hl.(57332)
A morte vem para todos - mas nao tao insistentemente como para Willie.
8e marre cinco vezes em cads jogo ... e esta sempre pronto a reiniciar
a aventura na hora que voce quiser!
90 REM Id bC,15616
100 REM ld a,4'5
110 REM call 58217
120 REM Id de,J2
130 REM add hl,de
140 REM Id (57332) .ui
150 REM Id be.S7000
150 REM Id <1,40
170 REM Id de.258
ISO REM call 58970
190 REM Id de,30
200 REM i e hI, 878
210 REM Id a,. NOTAS FUNEBRES DE WILLIE
DESCIOA PARA • FUNERAL
o INFERNO -=.:------------,-IM=PR::-:E~SS::-;A~O
PEROENOO VIDAS DO PLAGAA
A UL liMA MORTE SONS 'FINAlS
III
1111
II 46 CODIGO DE /tfAOUINA 46
ao
•
•
•
•
220 R£M Id l,a 350 11.EH Id a,l4:2 480 11.£11 call 949
230 REM call 9'19 360 REM Id b,ll 1190 (tEM Id .;a.50
240 REM Id ni , (57332) 370 REM Id il!.,57992 500 REM Id (.5B732) ,a
A 250 BEM Id de.704 380 BEM call me 510 REM jp 5857'(;'
260 REM sbc hl.,df;! 390 REM c.aLL 58939
270 11.£.M jr c,dead 4.00 REM Id de,USl Se Willie se arogou no mar, caiu num
280 BEM Id a,9 1110 REM Id hl,l646 buraco, foi picado par uma cobra ou
290 REM 1d (60005) ,a 420 REM call 949 atingido poe uma pedra, os sines tocam,
300 REM lel a, (57343) 430 REH Id de,392
310 REM dec a 4.40 REM 1d h1.1086 anunciando sua morte .. Para que soem
320 REM Id (57343) .a 450 REM call 9<1.9 as duas badaladas fUnebres, a retina
330 REM jp D2.,586'06 460 REM 1d de.261 BEEPERe chamada em 949 duas vezes
340 REM 1<'1 hl,HO 4:70 REM 1<'1 hI ,164:6 - em cada uma delas, com parametres
r diferentes nos pares HLe DE., \.
c
DESCIOA PARA 0 INFERNO
Quando Willie morre, ele desce para o inferno, que se situa no fun do da telao Para criar esse efeito, comecamos por apagar sua cabeca - se nao 0 fizerrnos, teremos uma coluna de cabecas descendo ate 0 fundo da tela!
Assim, a posicao de Willie na telaque aponta para a posiCiio de sua cabeca - e carregada da variavel em 57332 e 57333 para 0 par HL. Be e carregado com a endereco de urn caractere limpo de ceu do topo da tela. At': ajustado para dana sabre ciano. Finalrnente, a rotina print em 58217 e charnada, apagando a cabeea de Willie.
o valor 32 e enHio somado ao apontador de tela em HL. atraves do par DE, o que 0 faz se mover para a linha de baixo da tela. 0 resultado e cotocado de volta em 57332 e 57333 para ajustar tambem a varidvel,
Be e carregado com 0 endereco inicia! da figura de Willie com as pernas juntas .. A e ajustado com 0 codigo da cor de Willie, azul sabre ciano. DE e carregado com 258, especifieando urn bloeo de urn por dois - 0 conteudo do registro D define a Iargura do bloco, e o contetido do registro E, sua prnfundidade: I x 25b + 2 "" 258. A retina de impress au de bloco em 58970. blk, e chamada,exibindo na tela a figura de Willie com as pernas Juntas, uma posican abaixo da que ele ocupava ante s,
Enquanto Willie desce, ouve-se uma rnusica "celestial". Mais uma vez, os pares de regisrros HL e DE sao cartegados com parametros que a retina BEEPER utilizara, quando fOI chama-
da em 949. Desta vez, porem, em vez de urn som constante, 0 programa precisa de urn som intermltente. Para isso, earrega-se 0 conteudo do registrador R na pane menos significativa de HL, que e 0 registro L. A operacao e realizada via acumulador porque nao existe nenhuma instrucao ld l.r.
Usamos 0 registro R para manter a memoria dinamica. Este e urn recurso do hardware com a qual voce nao precisa se preocupar. Para nossos flns, basta. saber que a valor" desse registro ~ vanavel. Assim, cada vez que esta parte da retina for acessada ira prodnzir urn sam diferente.
SEIS PES DE PROFUNDIDADE
A posiCio da cabeca de Willie e carregada da variavel em 57332 e 57333 para 0 par HL; 704 e carregado em DE e subtraldo do conteudo de HL. 0 numero 704 - 32 X 22 - indica 0 corneco da pemiltima Iinha. Como Willie tern dois caracteres de altura, essa snbtracao colocara 0 valor 1 na baliza carry ate que as p~s de Willie tenham toeado a fundo da tela.
Enquanto a baliza carry conriver I, a instrucao jr c, dead manda a processador de voLta ao inicio da retina de en-
terro do personagem. Willie sera afundado mais uma posicao e as sinos voltarao a toear - nnm tom diferente . Quando os pes de Willie toearem 0 inferno, ele estara completamente enterrado. A baliza carry nao sera ajustada com J pela subtracao, nao haver! salta e 0 processador passara a executar a pr6xUna 1nmIUeao.
Tendo WiIHe chegado ao seu destine final, convem tocar urna cancao eonfortadora. Assim, carrega-se A com 9 e a rotina sound em 60006 e chamada, Ela executa uma versao curta da melodia inlcial do jogo. Para obter maiores detallies sabre rotina da musica, reveja 0 artigo da pagina 788.
Como nosso personagem perdeu uma vida, precisamos reajustar - Oll meIhor, decrementar - 0 rnimero de vidas. o valor dessa varia vel e earregado de 57343 para 0 acumulador, decrement ado e recolocado em 57343.
Se Willie ainda dispoe de alguma vida, a instrucao jp nz manda 0 proces- ' sador de volta ao program a de inicializacao, em 58606. Case contrario, continua na retina de nova partida,
,'fI, .
ACABARAM·SE AS VIDAS
Quando Willie tiver morrido pela quinta vez, 0 iogo acaba. Precisamos, entao, imprimir a mensagem "GAME OVER!". Para isso, ehamamos a rotina de mensagens, au me, em 58155. Como sempre, as parametres devem ser colccados nos registros HL, A, B e IX.
A posica,o de impressao e carregada em HL. A cor e ajustada em A. B carrega 0 eomprimento da mensagern e IX e usado como apontador de dados. Os dados para a rnensagem estao em 57892.
A retina que imp rime 0 esc ore em 5893ge chamada para imprimir 0 placar. Em seguida, ouve-se a toque que rnarca 0 final do som no jogo. Para
,
produzi-Io, a rotina BEEPER e chamada em 949 tres vezes, com valores diferentes em HL e DE a cada vez.
Para reajustar 0 atraso inicial, carrega-se 0 acumulador com 50 e transfere-se 0 valor na posi~ao 58732. Esse endereco ainda nao foi mencionado: ele pertence it retina finaJ do jogo e e incumbido de controlar 0 atraso geraJ. 0 processador salta para 58578, ajustando-o de maneira que vocepossa dar reinfcio a aventura, se quiser,
..
A rotina a seguir coloca Willie em seu nirnulo: .
10 ORG 20560
20 DIE LOA 11315
"
30 LDX +140 40 JSR SOUND SO LOA tI31 60 LOX .213 70 JSR SOUND
BO OI LOX 1824.9 90 LOU 11536 100 JSR CHARPR 110 LEAK 254.>: 120 STX' 18249 130 LOU U77704. 140 JSR CHARPR 150 LEAX 25,4, X HiO JSR. CHARPR 170 LOA 130
Quando a retina corneea, ouve-se um sino bater duas vezes, A homenagem sonora ao finado Willie, porem, e promovida pel a retina SOUND, que sera fornecida no proximo artigo de Avalanche.
Antes de testar 0 programa aqui apresentado, Iembre-se de colocar urn RTS no endereco inicial de SOUND, $5133. Caso contrario, havera urn erro.
SOUND requer dois parametres que especifiquem 0 tipo e a duraeao do som, Bles sao utilizados pela rat ina nos registradores Ae X .. Como as duas aetas produzidas diferem uma da outra.a rotina SOUND trabalha com parametres distintos a cada chamada,
DESCENDO PARA 0 INFERNO
Willie descera na lela em ctirecao ao inferno. Sua figura anterior deve, assim,
seI apagada, . ..
X e carregado corn ocenteudo de
18249. que aponta para a posicao que a personagern oeupa na tela; U e carregada com 1536, 0 endereeo do ceu no topo da tela. Em seguida,a rotina CHARPR e cham ada e imprime um bloco de Cell, apagando a metade superior da figura de Willie. 0 conteudo de X e entao adicionado a 254e recolocado em 18249, para que 0 aponlador de Willie desca urn caractere na tela.
U 6 carregado com 17774,0 endereco inicial dos dados para a figura de Willie com as pernas juntas. Depots, 0 processador salta para a rotina tHARPR, que imprimea metade superior de Willie uma posicao abaixo da ultima impressao. Novamente, X e merementado com 254 e CHARPR6 chamada para imprimir a metade inferior da figura,
Enquanto Willie esta descendo na tela, ouve-se urn grito de agonia - para isso, A e X sao carregados de novo e 0 processador salta para SOUND.
Willie deve chegar ao fundo da tela.
Verifieamos se isso ja ocorreu carregando X com a conteudo de 18249 e COJ'!lparando esse valor com 69L2, a inicio de 28~ linha da tela. Se a posicao de Willie em X for rnenor do que 6912, a instrU!;ao BLO ruanda 0 processador reiniclar 0 1a,,0 Dl e move Willie urn caractere para baixo, Caso contnirio, 0 process ad or segue em frente, pais Willie chegou ao fundo cia tela ...
o conteudo de 18249 - que arrnazena 0 numero de vidas que restam a Willie - e entao decrementado e LBNE NL V manda a processador para a: rotina que da nova vida a Willie e traz de volta a ultima tela .. Uma instrucao de desvio longo e usada neste ponte, _POTque a rotina NLV encontra-se numa parte bern anterior do programa - certamente mais do que 128 bytes, 0 limite para urn desvio eurto.
OUTRA PARTIDA
Se 0 conteiido de 18249 foi reduzido a 0, Willie nilo tern mais nenhuma vida, 0 jogo terminou e 0 processadorexecuta a instrucao seguinte,
A e carregado corn 5; X e carregado com 65535 e, depois, decremenrado. 0 processador fica nesse La90 ate que X seja O. Em seguida, Ae decremenrado e X volta a sercarregado com 65535. 0 processo se repete ate que A tambem tenha sido reduzido a 0..
o process ad or fica nesse la!;o 5 x 65535 vezes - pausa suficieme para que o jogador medite sabre 0 tr.agico destino de Willie .. Ao sair do laco de atraso, o processador salta. para a retina CLS, Que limpa a tela.
o conteudo de $FF22 e entao carre-: gado em.A, onde se executa a operacao Iogica AND com 0 valor 15. 0 resultado e armazenado na posic6e de memoria $FF22 $FFC2, $FFC4 e $FFC6.
Informamo , assirn, ao VDa (gerador do sinal de video) e ao SAM (multiplexador incrono de enderecos) que esramos voltando ao modo texto. 0 procedimento e 0 inverse do que utilizamos ao mudar para a modo graflco,
Y e earregado C9m $50B, posicao 00- de irernos imprimir a expressao "GAME OVER!". X, par sua vez, e canegada com $701, c6digos de tela para as letras GA. Essas letras sao colocadas na tela na posicao apontada por Y, que e incrementado duas vezes.
Em seguida, X e carregado com as codigos de tela para ME e as duas letras sao impre. sas na nova posicao apontada por Y, dois blocos a direita do inicio de GA. Par fim, os iiltirnos caracteres - 0, VE e R! - sao carregados e impresses nas posicoes adeq uadas.
Urn som anuncia 0 rim do jogo. Como esse sorn e formado por tres notas, A e X sao carregados e a retina SOUND e chamada tIes vezes,
o ruimero 100 e carregado no acumulador e armazenado em $5lEE. Com isso, ajustamo 0 atraso com 0 valor inicial. Quando 0 jogo for novarnenre executa-
do, comecara cam a mesma velocidade, Encerrando a execucao da retina, 0 processador faz urn Iongo desvio para o inicio do programs em GBIN.
A retina a seguir enterra Willie e verifica se pode ser ressuscitado:
10 CH'a h!l3H
20 Id hI. (-5205) 30 Id de. (62407) 40 add hl,de
50 inc: hl
60 Id a.255
70 push hI
80 ca11 77
90 POP hl 100 dec hI 110 dec hl 120 1<3 d.,255 130 push hI 140 call 77 150 POP hI 160 1d de,32
255 x 255 vezes e tern como unico fim atrasar a descida de Willie, para que 0 jogador possa ve-Ia.
A posicao de Willie e carregada da variavel em - 5205 e - 5204 para HL, onde e subtraida de 704 atraves de DE. Esse valor indica 0 co mec 0 da penultirna linha na tela. Como WilJie tern dois caraeteres de altura, a subtracao ira colocar 0 valor I na baliza carry ate que seus pes tenham tocado 0 fundo da telao Enquanto a baliza river esse valor, a Instrucao jr e,mo manda 0 process-ador de volta ao inicio da retina do ellterra, que afunda Willie mais uma 1'0- slcao. Quando seus pes tocarem ° chao, ele estara completamente enterrado; a baliza carry nao tera mais 0 valor 1 e nao havera 0 salto. 0 processador passa, entao, a executar a proxima instrucao.
o nurnero de vidas precisa ser reajustado - au melhor, decrementado, pais o pobre Willie perdeu uma vida. 0 rnimero de vidas e carregado no acumulador em - .5-221. decrementado e recolocado no mesmo endereco, Se ainda restam vidasa Willie, 0 processador salta para 0 programs de lnicializacao, em 53888. Caso contrario, continua na rotina de nova partida,
46 CODIGO
II
'"
6JO jp nZ,,5J8a8
640 Id de.234
650 lel a .114.
660 ld b,12
670 tt push be
680 pUBh de
690 push a.f
700 Id hI. (62407)
710 add hl,de
720 call n
730 [lOP af
740 inc a
750 pap de
760 inc de
770 pop be
780 djnz tt
790 Id b.30
600 tu ld a.255
810 du ld c .• 255
820 BU dec c
830 jr nz e . au
840 dec a
850 jr nZ,du
860 djnz tu
870 call 54023
880 ld a.50
890 Id (54133) ,a
900 jp 53855'
91Q end APAGANDO OS vssrleos
Antes de rnandar Willie para 0 inferno, a retina apaga seus vestigios na superficie, Se ele foi atingido par uma pedra, esta tarnbem sera apagada, evitando a deformacao de figuras. Para isso, coloca-se 0 padrao do ceu, c6digo 255, em cinco posir;oes ao redor de Willie. Exarninando codas as situacdes de colisao, voce veta que essas sao as posicoes necessarias,
o par HL e carregado com a posicao de Willie na tela, que esta no apontador em - 5205 e - 5204; DE e carregado com 0 endereco iniclal da TN da VRAM e sornado em HL, 0 apontador na impressao, Em seguida, a retina 77 da ROM e chamada cinco vezes, com 0 va[or de HL apontando para cinco diferentes posicoes ao redor de WHlie. Lembre-se de que a rotina 77 - utilizada no decorrer do jogo para imprimir um padrao na tela - coloca 0 valor de A no endereco da VRAM apontado por HL.
Essa rotina e executada quando nosso personagem morre - depois de se afogar no mar, cair nurn buraco, ser picado par uma cobra OU ser atingido e esmagado par uma pedra,
DESClDA PARA 0 INFERNO
Willie chega ate 0 fundo da tela, em sua descida ao inferno. Para criar esse efeito, cornecamos par apagar sua cabeca - se nao 0 fizerrnos, verernos no
video uma coluna de cabecas!
--....;._------------------ A posicao de Willie, que aponta pa-
~ ra a sua cabeca, e carregada da variavel
.... em - 5205 e - 5204 para HL, par de registros guardado na pilha. 0 endereco inieial da TN na VRAMe carregado em DE e sornado em HL. A retina 77 coloca a padrao 255 nessa posicao, apagando a cabeca de Willie. A posicaoe re-
cuperada da pilha para HL, sendo 50- rnada a 32 atraves de DE e eolocada de volta em - 5.205 e - 5204. Assim, Willie afunda uma coslcao na tela.
Esse novo valor e sornado com 0 eodereco inicial da TN na VRAM atraves de DE. 0 aeumuladore carregado com 0, a c6digo do primeiro padrao da figura de Willie com as pernas juntas. 0 apontador e colocado na pilha e a rotina 77 e chamada. 0 apontador e recuperado da pilha e sornado com 32, movendo-se para a posi9ao de baixo. A e carregado com 1, 0 c6digo do segundo padrao da figura de Willie. Chama-se a ~ rotina 77 e Willie desce uma posicao.
Em seguida, Be A sao carregados com 255. 0 acurnulador e decrementado ate 0 no lace dl. Quando chega a esse valor, 0 processador, por meio cia instrucao d.ju air, decrementa B, reajusta A com 255 e repete 0 processo ate que B tambern seja O. Esse laco e executado
ACABARAM·SE AS VIDAS
Quando Willie river consumido suas cinco vidas, 0 jogo acaba, Devemos, entao, imprimir "NOVA PARTIDA", com as pad roes previamente colocados na tab eta. de padroes da VRAM pela rotina fornecida 00 artigo da pagina 1001.
'0 par DE e carregado com 234, posiCao da tela code a primeira letra sera. impressa. A contem 0 c6digo de padrao da primeira Ietra; B, a mimero de padroes (doze, incluindo 0 espaco em branco). 0 taco tie executado doze vezes, usando a rotina 77 para imprimir a rnensagem no centro da tela. Note que este trabalho foi bern sirnplificado, porque os padroes para a mensagem jii estavam na VRAM, em sequencia.
Depois, 0 laeo formado par tu, do e su e executado 30 x 255 x 255 vezes, promovendo 0 atraso necessaria para a mensagem ser lida na tela. A retina que imprime 0 esc ore em 54023 e chamada para irnprimir 0 plaear final.
Para reajustar a atraso geral do jogO,carregamos 0 acumulador com .50 e transferimos esse valor para :54133 - endereeo que pertence a. rotina final e controla a velocidade do jogo.
o processador salta para 5385:5, 0 loteio da retina principal, para que voce tente de novo, se quiser ..
OIPIERACOIES
-
COM CADlElAS
III
A programsy8o dos blocos basicos de urn processador de textos em BASIC nao e diificil. Aprrenda aqui a remover sspaeos em branco e a converter maiusculas em minusculas e vice- versa.
A linguagem BASIC tern excelentes recUISOS para programacao com variaveis literals (alfanumericas), Diversas fun,nes de manipuJa'Yao de cadeias de earacteres (string) garantem a essa linguagem uma grande versatilidade, Vamos relembrar, resumidamente, 0 que faz cada uma dessas funcoes.
FUD{.oe gefsi
LEN(XS) - Retorna 0 comprimento
da cadeia XS (urn mimero inteirc entre 0 e 255). Existe para todas as versocs de 8ASIC. Nos microcomputadores ZX-Sl e Spectrum nilo e necessacia eolocar XS entre parenteses.
ASC{X$) - Retorna 0 c6digo ASCII
(urn mirnero inteiro entre o e 255) do primeiro caraetere da cadeia XS. No micro Sinclair ZX-SJ denemina-se CODE.
CHR$(X) - Tern a fun~ao inversa de
ASC, ou. seja, retorna 0 caractere correspondente ao ccdigo ASCIl indicado pela variavel X.
STRllNGS(X,Y) - Retorna uma cadeia com X earacteres iguais, com c6digo ASCII estipulado per Y. Nilo existe para as micrcccmputadores das linhas Apple, Sinclair ZX-81 e Spectrum,
J'unlj:oes'de subeadelas
LEFTS (XS, ) -Bxtrai os N primeiro caracteres da cadeia XS.
RIGHTS (XS,N)-Extrai os N ultimos caracteres da cadeia X$.
MIDS (X$,N,L) -Extrai L earacteres a partir da posic;ao N da cadeia XS. Pede ser utilizado tambem no formate M1D$(X$tN), extraindo entao todos as caracteres que existirem na cadeia XS. a partir dill posicae N.
55
nae ocorre eTTO: 0 valor que se retorna e igualado a O.
Nem todas as versoes do BASIC cUpoem do eonjunto complete de funcoes string. Alem disso, faitam certas fun~oes, necessarias para a programacao avancada com cadeias (sobretudo em processamento de rextos):
• eliminacao de espacos em branco no comeco au no fim de uma cadeia:
• conversao de mimi culas para mainsculas e vice-versa;
• extracao de palavras de uma frase.
Neste artigo, examinaremos como resolver alguns dos problemas mencionados acima por meio de pequenas sub-totinas, que podem ser acrescentadas a qualq uer programa,
REMO~Ao DE ESPACOS
Para muitas aplicacoes de processamenta die cadeias, eo precise remover antes OS espacos em branco existentes no comeco au no final de urn string. A subretina que apresentamos a seguir roo - tra como remover brancos a direjta. NeIa, a variavel AS contem a cadeia que deve ser processada, e OS. 0 resultado da retina:
1000 FOA I=LEN(AS) TO 1 STEP -1 1010 IF MIDS(AS,I,l)<>" n THEN 10]0
1020 NEXT I
10]0 BS~LEFTS(A$,lJ : RETURN
Ei
-1000 FOR I=LEN AS TO 1 STEP -1 1010 IF A3 (ITO 1) 0" .. THEN GOTO 1030
1020 NEXT I
1030 LET' as-AS rro 1) 1040 RETUi1.N
Para testae a retina, acrescente este pequeno programa:
10 PRINT ~ENTRE A CADEIA ~; 20 INPUT AS
Nos micros da linha Sinclair - ZX-Sl e Spectrum - nao sao necessarias fum;6es especiais para tratamento de subcadeias. Dames, abaixo, a equivalencia entre a referenda padronizada a subeadeias na linha Sinclair e as funI;oes anteriores mencionadas.
X$(l TO N) ~ LEFI$(XS.N)
X$(LEN X$-N TO + 1) ~ RlGHTS(X$, )
XS(N TO N + t-n ~ MlDS(XS,N ,t)
XS(N TO) ~ MID$(XS,N)
INSTR (.XS, Y$) - A fun~ao tnstring retorna a pcsicao em que SI!! esta o earaetere Y$ (ou 0 primeiro caractere da cadeia VS), dentro da eadeia XS,
Essa fun~ao pede ser ' irnulada nos ccmputadores onde nao existe, par meio de urn. laco de repeticao em que cada caractere em X$ e extraido. sucessivamente, sendo comparado com Y$. Isso pode ser feito com a funcao MIDS(XS,I,l), onde reo indieador do Iaco ..
FUlI~oes de conversio
Numeros podem ser representados na forma de uma cadeia de digitos, rnais os sinais de ponro (.), rnais (+), menos (-), e as letras E au 0 (notacao eientifiea em precisao simples ou dupla, respectivamente, Esta ultima 56 existe nos micros das Iinhas TRS-BO, TRSColor e MSX). Para efetuar a conversao da repreaentacao numerica para eadeia, ou vice-versa, existem duas fun~fies especiais em ASCll:
STR$(X) • Retorna a cadeia correspondente ao numero X. Urn espaco em branco e adieionado ao lnfcio da cadeia,
VAL (XS) - Efetua a operaceo lnversa, ou seja, retorna 0 valor numerico correspoudente iii. cadeia X$, Se X$ nao eontiver urn mimero,
:111111
• MANIPULA~AODE
CADE,IAS DE CARACTERES
• CONJUNTO DE FUNCOESSTAING • NOVAS ROTINAS DE PROCESSAMENTO DE TEXTOS
• ELIMINACAO DE
=- ..::..:ES:..:....P'::'-A~OS EM BRANCO
• GONVERSAO PARA
MAIUSCULAS
• CONVERSA-O-P-ARA-."":"M:"::"I';_:_:NUSCU LAS
]0 cosue 1000 40 PRI.NT BS 50 GOTO 10
A linha 1000 da sub-retina percorre a cadeia de caracteres do rim ao come- 1;0, recuando urn caractere pOT vez, A linha 10 lOve rifica se 0 earactere e urn espaco em branco. Enquanto tor, 0 laeo se repete. A ocorrencia do primeiro caraetere nao branco causa a inte.rrup~ao do lace e a extracao dos I caracteres ill, esquerda (linha 1 OlO},
Ao testar 0 programs nos micros das linhas TRS-SO,. iRS-Color. MSX. Apple au TK-2000. nao se esqueca de digitar a eadeia entre aspas, pais. normalmente, 0 comando lNPUT jll realizaa fun"io de retirar as espacosicofocados ,ft di- I reita da mesma.
Nas versoes do BASIC Que permitem fun~oes programadas (DEF FN), a rouna anterior pede ser substituida por algo bern mais compacta:
5 DEF FNTBS(ASl-LEFT$(AS.INSTU( AS+· .,- ~)-ll
Para fazer urn teste, troque a linha 30 do programs de verificaeao por:
30 Bs"'rNTB$(AS)
Observe que a funcao so opera corretamente se nao houver mais do que urn espaco em branco entre as palavras de uma eadeia,
Para remover os espacos em braneo a esquerda podernos usar a seguinte versao da retina anterior:
1200 FOR I-I TO LEN (AS)
12HI IF MIOS (AS" I, l} <>~ ~ TBFN 1230
1220 NEXT I
1230 BS=MIDSCAS.I) : RETURN
1200 FOR 1=1 TO LEN AS
1210 IF AS(I TO 1)<>- • THEN GOTO 1230
1.220 NEXT I
1230 LET B$-A$(I TO) 1240 RETURN
Para testar ,3, retina, substitua a linha 30 do programa de veriflcacac por GOS{JB 1200.
Note que apenas a primeira ea ultima linhas da sub-retina sao diferentes, pols e necessaria percorrer a cadeia do primeiro ao ultimo caractere, ale encontrae 0 primeiro nao branco .. Feito 18- so, eliminam-se todos os caracteres it! direita,
MINUSCULAS E MAIIJSCUlAS
Dutro recurso utH e a conversao de todas as tetras minuscules de uma cadeia em rnaiusculas, ou vice-versa. Lembrese de que 0 c6digo ASCII deuma letra mlnuscula e igua! ao c6digo da maluscula correpondenre, mais 0 valor 32. 0 c6digo de A, pal" exernplo.e 65, e ° de a, 97. Portanto, para converter maidseulas em minuseulas, precis amos apenas somar 32 ac c6rugo das tetras - quando 0 c6digo ASCII for rnenor do que65, quee a Ietra A. au maier do que 90, que e a letra Z. 0 caractere nao deve ser convertido.
1300 B$="~
1305 fOA I-I TO LEN (A,) 1310 CgASC(MIDS(AS.I,l)) 1320 IF C>64. AND C<:91 TH.EN c=c .... n
1330 9S .. eS+csI!.$(C') 1340 ~EXT I ~ RETURN
Ei
1300 LET b$~""
1305 rOA i-I TO LEN as 1310 LET c-ABC aSCi TO 1)
1320 IF <:)64. AND c<91 THEN LET c"c+JI!
1330 LET bS"'bS+CHRS C 134.0 N'EXT i
1350 RETURN
Nao apresentamos uma versao para os cornpativeis com 0 ZX-81 , pois estes Ilaa t@m letras minuscules.
Para testar a retina aeima, substitua a Iinha 30 de nosso programa de verificacao por GOSUB 1300.
o funcionamento da meiDa e simples: o laco que val de 1305 a 1340 percorre a cadeia de entrada, remandc urn caractere de cada vez, na Iinha 1310. Se 0 sell c6digo estiver entre 65 e '90, trata-se de
Como uma cadela e' arma;zenadsl na memoria do computado.r7
A cadeia e uma estrutura de dados multo Util, pois naD exige urn espace fixo para arrnazanaqern de cada vari~· vel literal, como acontece com as vari~'-;.els ~umerjc~.s. U.msi variavel de'pre-I cisae SImples sempre ocupa quatre bytes na msmona; urns vari,qel die precisao dupJa Ilquinze decimais) ocupa sais bytes e assirn par dtante.
Manter esse esquema de alccacso fixa de espsco na memoria para as cadeias levarla a urn grande desperdlclo, pais 0 comprlmento das cadelas usadas em urn progrl';!rna pode varier rnuito. Assim, 01 lntarpretador BASIC celoea toeas as eadeias em urn .unfeD aspaco, eeservado para esse fim.
Para saber cnde ccrneea e· acaba eacia cadets, 0 interpretador mantsm cI.uas outrasestruturas de dedos: uma serie- de apcntadoreslndlnaas localfoes Cle rnernorla ondecomecarn as cadeias. No byte 0 da cadeia esta indicadoo seu comprimento, em bytes. E pOI isso que o comprimento rtH!b:imo de urns cadeia, no dlalsto Microsoft BASIC, e .255 (0 maior numero decimal represemave! em olto bltsl,
uma letra maiuscula; portanto, devemos somar 32 ao mesrno. A linha 130 COIlcatena 0 novo caractere a cadeia de saida,
Para converter miruisculas em mainsculas basta alterar apenas uma linha da retina:
1320 IF C)96 AND C<l23 THEN C-C-J2
A retina veri fica se 0 c6digo ASCII do caractere esta compreendido entre 97 e 122 (letras a a z, minuscules). Se estlver, simplesmente subtrai 32 desse codigo.
27 APLICACOES 27
Com 0 programa apresentado neste artigo, os usuarios do lRS-Color terio acesso direto a informac;:ao contida nos disquetes, podendo altera-Ia ou recupera-Ia em caso de acidente.
TRS-COLOR: M RDEDISCOS
27
TRILHAS E SHORES
- -
Para utilizar aosso prograrna-editer, voce devera ter urn mapa do Iormatc do disco. Veremos aqui seus aspectos mais relevantes; outros detalhes serao encontrades no manual do DOS.
Se voce vai trabalhar com urn disco que reline dados importantes, recomendamos que Iaca uma c6pia dele. Qualquer erro cometido ao usar este prograrna podera danificar toda a lnforrnacao nele armanezada.
o TRS-Color tern urna interface especial que coptem 0 sistema operacionat. Este nao preeisa, assim, estar gravado no disco para ser lido quando se liga 0 cornputador - co:mo ocorre com a rnaioria dos micros.
o disco divide-se em 34 trilhas, cada uma com dezoito setores de 338 bytes. Destes, apenas 256 sao usados para arrnazenamento de dados; as 82 restantes sao utllizados para contra le do sistema operacional,
o diret6rio, Que controla as arquivos do disco, fica armazenado na trilha 17. Ele pede ser acessado par meio do comanda DIR, que mostra todos as arquivos, discriminando seu tipo e tambem a mimero de blocos empregados. Vejamas como esta dividid a a trilha 17, a partir do setor 3:
Byte Conleudo
0-7 Name do arquivo. Ocupando um mnnero de bytes menor que oito, e preenchido porespaeos em branco. Byte 0 igual a 0 indica arquivo apagado, Byte 0 igual a FF signiflea que este e as proximos item do diretorio ainda oao foram usados.
8-JO Extensao do nome do arqulvo,
11 Tipo de arquivo:
o program a BASIC;
1 arquivo de dados BASIC; 2 programa em linguagem de
maquina;
3 arquivo de texto,
12 00 arquivoem formate binario.
FF a.rquivo em formate ASCII.
ACESSO DIRETO • . 0 PROGRAMA
I.E.ITURA E GRAVACAO -=.~, ~~~~~-=""":""~LE:::::IT~U='"='RA
FORMATO DO DISCO DE UM SETOR
o DIRETORiB =.~ .,....."....::EX:....:.:E~C.=...UT:...:;.;A~ND~O
- COMO UTILIZAR AS ALTERACOES
• • • • •
A tarefa de gravar e ler arquivos em urn disquete e gerenciada pelo sistema operacional de disco (DOS). Em geral, o modo como se organiza a informacao no disco ou como se da a transferencia de dados nao constitui problema para o usuario - 0 DOS cuida de tude, transformando a unidade de disquete em urna extensao do computador.
No entanto, podemos acessar partes individualizadas do disco, manipulando e a1terando diretamente a inforrnacao nele contida, Este e um recurso oferecido pelo DOS que abre inumeras possibilidades de aplicacao. Permite, por exernplo, que sf: alterern hens de urn diret6rio e nomes au dados de arquivos. Sua aplica-;:ao mais interessante talvez seja a recuperacao de informacoes: com o acesso direto voce pode, entre outras coisas, recuperar arquivos que foram apagados, feehar arquivos ou restabelecer apontadores, corrigindo 0 encadeamento dos setores que cornpoem urn arq uivo em particular.
o acesso direto a blocos individuais de informacao em urn disco funciona de modo semelhante a urn monitor destinado a examinar a memoria do micro.
A operacao do monitor de disco (ou editor de disco) e viabilizada. bask amente, pels armezenagem temp oraria , em uma parte da memoria, da informaCaa lida do disco ou a sec gravada, Enquanta esta na memoria •. a inforrnacao pode ser alterada a vontade, sendo, em seguida, substitulda no disco.
A GEOGRAFIA 00 DISCO
Algum conhecimento sobre a distribuicao dos dados no disco e Iundamental para a manipulaeso do bloeo de infcrmacees em uma trilha ou setor determinado. 0 diagrama, nonnalmente referido como formate do disco, e definido pelas retinas de formatacao do DOS.
Usa-sea notacao em hexadecimalem todas as referencias sabre acesso direto ao disco - por isso, nossas referencias tambem adotarao essa notacao, Como nao empregaremos a notacao decimal em nosso program a, sera utll ter uma tabela de conversao de decimals para hex e outra de hex para ASCII,
13
Ntimero do primeiro bloco do arquivo (0-67).
14-15
Numero de bytes em uso no ultimo setor do arquivo.
J6-31
Sem uso.
Para distribuir os arquivos no disco, o eomputador usa como referencia blocos, que nada mais sao que metade de uma trilha. Assim, 0 bloeo 0 sera composto pelos setores 1 a 9 da trilha 0; 0 bloco 1, pelos setores lOa 18 da trilha 0; 0 bloeo 2, pelos setores 1 a 9 da trilha 1 e assim por diante, ate II trilha 16. A trilha 17 - que contem 0 diretorio - nao e levada em consideracso, mas a divisao recorneca a partir da trilha 18 - onde os setores 1 a 9 cornp6em 0 bloco 34 - e, com isso, prossegue ate a fim do disco ...
A identificacao dos blocos livres para uso e feita por meio do setor 2 da trilha 17. Os primeiros 68 bytes desse selor representam os blocos de 0 a 67. Quando determinado byte contem 0 valor FF, 0 bloco esta livre. Urn valor de 00 a 43 Indica sua ocupaeao por urn arquivo cuja referenda e dada pelo mimero decimal obtido apes a conversao do valor. Urn valor de CO a C9 indica que o bloeo em questao e 0 unico ou oultimo do arqulvo; 0 egundo dlgito especifica a mimero de serores que estao oeupados no bloeo.
Essas informacoes sao irnportantes, especialmente quando se trata de recuperar arquivos apagados por engano - tarefa, alias, nada facil, mas que pode ter bons resultados se realizada com urn pouco de paciencia.
No caso da recuperacao de urn arquivo pequeho, que DaO ocupa rnals de urn bloco, 0 trabalho e mais simples. Em primeiro lugar, voce deve Iocalizar 0 program a desejado no diretorio. Para restaurar seu nome inicial, substitua 0 00 da primeira posicao pela letra adequada. Depois procure 0 13? byte do item (0 tereeiro apos a ultima letra da extensao do nome do arquivo). Transforme sell valor hexadecimal em decimal, para identificar 0 bloeo usado pe- 10 seu programa. Em seguida, grave essa inforrnacao no setor e earregue 0 setor 2 da trilha 17. Procure pelo byte CO[respondente ao bloeo (lembre-se de que a eontagem comeca no 0). Ele deve ter o valor FF. Substitua esse valor por C9 e grave no setor. Saia do programaeditor, carregue 0 seu programa na mem6ria e volte a grava-Io, para que todos os apontadores sejam atualizados.
21 APLICACOES 27
Pronto. seu programa esta totalmente recuperadol
Quando 0 programa que voce quer recuperar e maior, a operacao torna-se complicada, pais 0 DOS passa para FF o valor de todo os bloeos usados pelo programa que foi apagado. Assim, cornecamos 0 trabalho conhecendo apenas o primeiro bloco. Os demais tern que ser
proeurados no disco, setor par setor. 0 program a so paden! ser carregado na memoria do eomputador quando tivermas monrado a sequencia correta de bloeos. Inicie a busca pelos blocos vizinhos do initial e va se afastando ate ter Iocalizado todos eles, E urn trabalho arduo, mas, certarnente, havera casos em que valera a pena.
218 V$-CHR$(VAL(~~H~+R$» :P~R+Y 1II11+X
1000 SL-l:GOSUB 5000
1010 DSKIS D,T,S,AS (0) ,MHO 1020 RETURN
2000 F~l:H-l:CLS:PRINT"aSCII OU
hEX 1"
2010 RS-INKEYS:IF RS()"A" AND R $<>"B" TffEN 2010
2020 AZ-O:IF R$-"A" THEN AZ-I 2030 IF F-O THEN 2050
2040 PX~96:CP~1535:IF AZ=l GOSU B 2320 ELSE GOSUS 2280
Carregue 0 programa na memoria e escolha 0 disco no qual YOCe vai trabaIhar. Enquanto esta aprendendo, COIlvern utilizar urn. disquete que nao contenha dados importantes.
Digitando RUN, voce tera quarro opc;:oes: Carregar setor (C). Veri editor setor (V). Sdtvar setor (S), Diretorio (D). Pressione D para obter uma listagern detalhada dos arquivos do disco, incluindo os que foram apagados anteriormenteo Estes estarao marcados com urn asterisco na col una DEL. Lernbre-se de que a lnclusao do nome de urn arquivo
12211
27
no diretorlo nao garante que ele esteja dlspouivel no disco' - os bloco usados pOT ele podem ter sido reutilizados por um outre arquivo. Se voce tern urna impressors conectada ao Micro, digite POKE 150,1 antes de executar 0 programa: a op~o de irnprimir 0 diret6rio lhe senil oferecida.
Em segujda, digite a tecla C para carregar urn setor. Tente primeiro 0 diretorio, pedindo a trilha 17, setor 3. Digite V para visualizar 0 dados. Pressionando A au H, voce podera obter, a qualquer memento, 0 dados no formato ASCn au hexadecimal. a primeiro Ii! 0 mais conven:iente para a identifica-
~ao de names de arquivos e linhas BASIC. 0 segundo deve ser usado quando se quer encontrar os valores hexadecimais de urn determinado byte.
As setas movem 0 cursor para 0 ponto que se desejar. Para alterar urn VSllor, pressione a barra de espacos e torneca 0 novo byte, sempre em hexadecimal. Note que apenas urna parte do setor e exibida, A rnedida que se movimenta 0 cursor para baixo, a tela vai rolando e rnostrando 0 que resta,
Ao terminer a ediciio de um setor, pode-se grava-Io usando a opl;ao S do menu. Entre as informacoes solicitadas pete programa .... e prontol
f~(N~CAS
DIE ~(lUJ~AO
• UMA lECNICA MISTERIOSA7
~.~-~A:";;'M_;;_;A()UINAINtELIGENTE
• PROCEDIMENTOS RECURSIVOS
• LlMITACOES
• COMO EVITAA EAROS
Se seu pr.ograma possui sub-rotinas que sa.o chamadas repetidamente.
e bem provllvel que as tecnicas de recul'sao possam tomil-Io mais nipido e eficiente. Veja como utiliza-Ia!s.
A construcao de urn programa consiste, essencialrnente, em achar a rnelhor solucao para urn determinado problema atraves de uma serie de comandos. A medida que ganha experiencia, 0 programador aprende que 0 melhor caminho para issoe dividir 0 problema principal em partes. rnenores. Tal metoda, no entanto, pode virar urn pesadelo. Muitas vezes, ao tentar resolver uma etapa d.o processo, esbarra em outro processo e, quando resolve este, surge ainda outre e assirn por diante, Em certo momento a prograrnador pensa em desi stir , pois imagina estar andando em um verdadeiro circulo vicioso.
Mas urn microcornputador nao esmoreeeria tao facilmente:para casas desse tipo, em que as probiemas parecem SaIT uns dos outros, exisrem tecnicas avaneadas de programacao, as charnadas teenicas de recursdo,
UMA TECN1CA MISTERIOSA?
Geralmente, programadores iniciantes consideram a recursao uma Ferra-
menta complexae ate mesmo misteriosa. A grande dificuldade esta na compreensao da propria Iistagern de urn prograrna desse ripe: ate mesmo as fluxogramas rnais didaticos parecem obscuros quando representam proeessos re- 0 cursivos. Apesar de tude, 0 principia
basico dessa tecniea nao {: tao com-
plicado. r=J
Na matematica, a palavra recursao e utilizada para designar a repericao de uma determinada operacao. Em informatica, porern, ela adquire urn significado especifico. Basicamente, a recursaoe a chamamento sucessivo de urna sub-retina ou de urn procedimento, apos serem estabelecidos alguns pararnetros iniciais. Depois de acionada, a sub-rod ria ~ ou procedimento - chama a si mesma, repetldamentevatualizando os
parametres iniciais a eada vez, ate que uma certa condicao, previamente estabelecida, seja alcancada.
A MAoUiNA INTELIGENTE
Imaginemos B! seguinte sltuacao: urn motorista se encontra em uma grande 0- dade desconhecida e precisa if do Ingar A para 0 Il1gar B. Ernbora tenha 0 rnapa da cidade, aeha multo dlflcil ir diretamente ao local desejado. Decide entao dividir a ltinerarlo em varies trechos.estudando urn pOI vez, Escolhe, assirn, urn lugar C, emuma posir;:iio intermediaria, Analisa 0 trajeto entre A e C e se dirige para la,
Chegando em C, 0 motorista avalia a possibilidade de ir diretamente ate B
Caso lsso l.he pareca complieado, procura uma outra po.si~ao intermediaria, D. 0 processo se repete ate que ele atinja seu destine,
Esse exemplo demonstra 0 princlpio basico da re ursao, tal como e aplicada em programacao: a solueao de urn problema e obtida pela sua subdivisao em problemas men ores au mais Faceis.
Assim que 0 programa alcanca urn novo myel de recursae, torna-se necessaria armazenar as inforrnacdes que foram conseguidas no nlvel anterior, para recupera-las no passe seguinte. Ao initio de cada nfvel, urn novo conjunto de parametros e montado e, por meio de urn teste, verifica-se se tal etapa chegou ao fim. Sem esse teste, 0 processo nunea terminaria.
Para observar 0 funcionamento des-
IIIII
sa tecnica, execute 0 proximo programs. Ele imprime todos os valores inteiros
positives de ate 1.
Ei
20 PRINT INVE~SE 1iTAB l:~ I NTEIROS POSITIVQoS DE N ATE l~ 30 INPUT "DlCITE 0 INTEIRO A PARTIR DO QUAL VOCE QUER C ONTAR RECREDIN-DO ,ATE 1 (0 P ARA SAIR) "IN: LET N ... INT N:
IF N(l THEN STOP' 4.0 GOSUS 80
50 GOTO 30
80 IF N-O THEN RETURN 90 PRINT ,NiN ~i
100 LET N=N-1: (lOSUB 8~ 110 RETURN
10 CLS
20 PRINT "INTEIROS POSITIVOS DE
N A 1"
30 PRINT:PRINT:INPUT"DIGITE 0 V ALOR INTEIRO A P.\RTI1t DO QUAL 'J OCE QUER REGREUIR ATE 1(0 OU N EGATIVO PARA TERMINAR) B;N:N-IN T(N) :IF N(l THEN END
4.0 OOSUB 80
50 OOTO 30
80 IF NOlO THEN RETURN 90 PQINT N;·,":
100 N'·N-l ::(lOSUB 80
o RETURN
TAB( 7)·INTEIROS POS
I1III
ITIVOS DE 1 A W
30 PBINT : PRINT : INPUT "DIGI TE OM VALOR INTEIRO' PARA A CONT MDt BEGRESSIVA (1-23 E 0 OU ME NOS PARA BAIR) ~ iN: N" INT (N}
: IF N < 1 THEN END
40 oosna 80
50 GOTO 30
BO If N = 0 THEN RETUQN
90 PRINT Hi",";
100 N • N - 1: aOSUB 80 110 QETUM
HI ClS
20 PRINT TAB(5) ~INTEIROS POSIT IVOS DE 1 A N"
JI) PllINT: PIUNT: INPUT" DWITE 0 N I.lMEB.O PARA A CONTAGEM REGREs-st VA (0 OlJl!IENOS PAllA S,MR) " ;N:N'" IN.T(Nl·:.U N<l THEN END
4.0 GOSU8 80
50 GOTO 30
eo IF N""O THEN RETURN
90 PRINT N:",":
100 N"'N-l : GOSUB 80 110 RETUBN
o programa permite que voce introduza um valor inteiroe, a partir dele, faz. umacontagem regressiva ate 1. Qualquer valor rnenor que I interrornpe 0 prcgsama, No Apple e no TK·2000. valores maio res que 23 nao Iuncionarao, pais esses micros podem rnemorizar apenas 23 desvios para uma sub-retina ..
A linha 40 chamaa sub-retina recursiva, A primeira linha desta verifica se a tarefa foi completamente executada. Elise teste e essencial para 0 termino de todo 0 proeesso,
No primeiro nlvel da recursao, a variavel N possui 0 valor introduzido per voce. Ele e impresso pela liaha 90.0 segundo nivel e inicializado pela Iinha 100, que reduz 0 valor de N em uma unidade e chama a sub-retina novamente, com 0 valor de N jli alterado. 0 prograrna altema-se, assim, repetidamente, entre as linhas 80 e 100.·
Quando N alcanca 0 valor 0 (na linha.lOO). 0 programa e desviado, como de costume. para a linha 80. Dude eneontra o ecmande RETURN, que 0 faz retomar da sub-rotiaa cbamada na linha 101). A proxima Instrucae, na linha 110. tambem e urn comando RETURN. que,
desta vez, faz 0 prograrna retornar da sub-retina chamada na Iinha 40. A linha 50 executa 0 programa novamente,
Note que quando 0 programa termina, a variavel N eontem 0 valor 0, atribuido na linha 100. Mas a linha 90 nunca imprime esse valor. Para colocar 0 ultimo valor impressa na variavel N, voce poderia acrescentar a linha 105 com 0 comando N = N + t (LET N"" N + 1, para 0 Spectrum). Desse modo, N conteria sempre 0 Ultimo valor impressa.
PR:OCEDIME.NTOS FlECURSIVOS
Algumas outras linguagens, como a PASCAL, induem 0 qUe" se chama de proeedimenio (procedure). Trata-se de urn canjunto de linhas definidas em uma eerta parte do programa - como uma sub-retina - que recebe urn nome. OJlerentemente das sub-retinas, urn proeedhnentoe chamsdo atraves, desse nome. Quando se define urn procedlmento. indicam-se tambem as variaveis que, apos seu termino. retomarao an estado inicial, Estee urn born expedients na constru9ao de processes recursivos.
Os tipos de BASIC com que rrabalhamos DaO permitem que uma variavel assuma urn valor e, ao sair da sub-totina. retorneao valor inicial sern a interferencia de umcomando. Assim, somos obrigados a restabelecer seus valores iniciais antes de iniciar eutra subretina. 0 programa a seguir demonstra como contomaresse problema.
5i
10 DTH N{)4): DIM A(14) 20 CLS
30 PRINT tAB 6; INVERSE Ij·C ALCtfLO DEFATOP.IAL~
40 INPUT "DIGITE NUMERO PARA.
FA.TORrAL (1-33, OU 0 PARA
SMA)" ;tm
SCI IF NU)33 O~ NUOINT (NUl OR NU(O TBEN RUN
60 IF Nu-a THEN STOP
70 LET LE=l: LET N(LE)=NU:
LET AN=NU
80 GOSUS 150
90 PRINT ANi"! = ftjA(11:
PRINT : GOTO 4.0
150 IF N(LE)~O THEN LET A(LE) "'1: GOTO 180
160 LET LE-LE+l: LET N(LE1-NCL £-1)-1: GOSUB 150
170 .L.ET LE~n-l: lET A(LE)""A(L E+l)*N(LE)
180 RETURN
10 DIM N(34),A(]4.) 20 CLS
30 PRINT @6,·CALCUlO DE FATORIA
Lor
4'0 I.NPUT"DlGITE 0 NUMERO PARA F ATORIAL (1-]J OU 0 PARA SAUl.)
" iNV
50 IF NU>lJ OR NUOINT(NU) OB N u<o THEN 20
eo IF NU~'O THEN END
70 LE-1:N(LE)-N'U:AH-NU 810 GOSUS 150
9Q PRINT AN"! .... ,AU) : PRINT: GO TO 40
150 IF N(LE)=O THEN A(LE)=l:GOT o 180
16'0 LE~LE+l:N(LE)-N(LE-l)-l:GOS U9 150
170 LE·LE-1!A(LE)-A{LE+l)~N(LE) lao RETUlI.N
10 DIM N(34) ,A(34) 20 ROME
30 PRINT TAB' lO)"CALCULO DE J;'A'l'ORIAIS"
4.0 PRINT: INPUT "DIGITE 0 NUM ERO FATORIAL (1-22 OU 0 PARASAI R) "1NU
50 IF NU > 22 OB NU < > INT (NUl oa NU c 0 THEN 20
60 IF NU = 0 THEN END
70 U: '" I:N(LE) .. NU:AN '" NU 80 COSUB 150
90 PRINT ~~! = ·iAtl)~ PRINT : GOTO 40
150 IF N(LE) - 0 THEN A(LE) - 1: OOTO ,1,80
160 lE • LE + I:N(lE) = N(lE - 1) - 1: aOSUB 1~0
170 LE - LE - l:A(LE) ~ ActE + 1) 011: N (LE)
IBO RETUIIN
10 DIM N(34) ,A(l4) 20 ets
30 PRINT TAB(9} "CALCULO DE FAT oarxrs-
40 PRINT:INPUT· DIGITE 0 HOMERO
FATORIAL (1-]3 E 0 OU MENOS PA RA SAlR) .. i NU
50 IF NU)]3 OR NUOINT (NUl OR N U(O THEN 20
60 IF NU""O 'THf;N END
70 r:.E=l:N(LE)=NU.:A.N=NU 80 GOSUE! 150
90 P]UNT:PRINT AN;"! '" "iA(l):P RINT:GOTO 40
150 IF N(LE)=O TBEN A(LE)-I:GOT o 180
160 LE~lE+l:N(LE1-N(LE-l)-1:GOS US 150
170 LE-LE-l:A(LE)-A{LE+l)*N(LE) 180 RETURN
J
~\
COTO 10
50 DIM A(A): DIM ~(2+SQR (All 60 LET A(A)=lOO: PRINT I,NVERS£ 1 j '''TABELA DESORDENI>.D A :"": FDA K-l TO A~l: tET A (K)~INT (RND*99): PRINT A(K); " .. ~: NEXT K
70 LET L-l: LET LV~l; LET B-A -1: COSUB 1000
80 PRINT INVERSE li""TABELA' ORDENADA : .... :: 'FOR I(_.z.l TO Al: PIUNT A (K) i" ";: NEXT K
90 IF INREY$<>" • THEN GOTO 90
100 RUN
1000 IF B)L THEN LET I=L: LET J-R+l: LET V-A(L): GOTO 1010 1005 RETURN
1010 LET 1=1+1: If A(I)(V THEN GOTO 1010
1020 LET J"'J-l: IF A(J»V TEl EN.
GOTO 1020
1030 IF J>=ITRl;N LET ,],:A(I) :
LET A(I):A(J): LET A(J)"'T: GOTO 1010
1040 LET T=A(L}: LET A(L)=A(J):
LET A(Jl=T
1050 LET B(LV1-B: LET LVaLV+l:
LET R=J-l: GOSUB 1000
1060 LET LV-LV-1: LET R-RCLV):
LET L-l: COSUB 1000 1070 RETURN
IIIIIII
Execute 0 programa e introduza urn valor qualquer. Lembre-se de que valeres malcres que 22 nao funcionarao no Apple, nero no TK-:;?OOO.
o programa calcula a fatorial do numero que voce digitou e 0 imprime na tela. 0 fatoriaJ de um mimero e 0 resultado da mulriplicacao, entre si, de todos as numeros inteiros menores que ele e ele mesmo. Por exemplo, 5 fatorial (escreve- e 5!) e igual a ] x 2 x 3 x 4 x S, ou eja, 120. 0 calculo de fatoriais geralmente e necessaria em aplicacoes estatisticas, Urn metoda rapido de executa-Io sera sernpre muito iitil.
Inicialmente, 0 programa dirnensiona algumas variaveis CUnha 10), em numero suflciente para gerar 0 fatorial maximo. A variavel N [era como Indice 0 nivel da recursao (LE) - N(LEJ.
A e trutura principal do programa comeca na linha 70; onde 0 nivel e inicializado em L Nessa rnesma linha, 0 numero que voce introduziu - suponhamos que eja 5 - e atribufdo a N{t) e a AN (variaveI que ita aeumular a resposta) .. A linha 80 chama entao 0 primeiro nfvel da recursao. A primeira linha da rotina de recursao (linha 150) verifica Sf a tarefa ja chegou ao fim, ou seja, se N(LE) = O. Como N(LE) ainda e 5, 0 program a passa para a hnha J60, que incrementa 0 nivel (para 2), estabeIeee como numero corrente 0 4 e chama a sub-retina recursiva mais uma vez. Quando a Iinha 160 inerementar 0 valor do nivel para 6 e decrementar 0 ruimero corrente para 0, a linha 150 detectara. esse Ulti.mo valor atribuindo 1 a N(6) e desviando a programa para a linha 180. Encoutrando urn RETURN, a execucao passara pan a linha 170, que Ioi a ultima a chamar a sub-retina, Essa linha reduzira 0 valor do nlvel para 5 e .A.(5) passara a ter 0 valor de A(6) vezes A(S). Com isso, atribui-se a MS) a valor de ] x l , ou sej a, 1. A Iinha 180 devolve, entao, 0 controle para 0 final da linha 150, onde A(4) assume 0 valor de A(5) vezes A(4). Desse modo, sera. atribufdo ao trivet da recursaoo valor I (ealculado acima) vezes 2.
o laco ira se repetir sempre que a GOSUB da linha 160 for chamado. Quando 0 laco estiver completo, LE sera J e 0 ultimo RETURN apontara para a linha 80. A proxima lnstrucso (linha 90) imprimira entao 0 resultado: 120.
lIMITAt;:OES
Alem do problema com as variavels, que nM ocorre com as procedimentos, es tipos de BASIC comos quais traba-
Ihamos apresentam uma Iimitacao quanto ao numero de vezes que uma subretina pode chamar outra, A cada chamade. 0 sistema precis a guardar na memoria a posic;ao de onde ela foi feita, 0 que requer a utiliza~ao de um ponteiro na pilha interna. E POf esse motive que 0 Apple e a TK-2000 nao podern calcular fatoriais rnaiores que 22 .. Iii 0 limite de 33 nlveis para outros micros deve-se simples mente a capacidade de armazenamento de mimeros, 0 fatorial de 34 excede 1.7 x 10 1 38, 0 maximo que lim computador pode manipular.
PREVISAO DE ERROS
Para manter seu program a dentro dos Iimites do micro e evitar uma "pane", voce deve saber como ele se COIDporta desde a primeiro nivel da recursao. Em geral, utiliza-se como teste uma informacao inicial que culrninara em uma resposta ja esperada, Para facilitar 0 trabalho, voce pede tambem considerar a retina recursiva como urn eerto rnimero de sub-retinas em :seqiiencia.. Note que urn desvio condicional para fora da sub-retina e desaconselhavel, pois 0 ponteiro que maroa a volta do GOSUB ficaria desorientado,
Quando voce estiver escrevendo urna sub-retina recursiva, procure comecar sempre com urn teste de safda. A fun~ao desse teste e decicUr se 0 problema (caracterizado pelos parametres iniciais) pode ser resotvide diretarnente, scm a necessidade de subdivisoes.
Antes de comecar 0 programa, planeje com cuidado 0 que deseja que a sub-retina faca, E, quando ja estiver escrevendo 0 programa, nao se preocupe com a sequencia exata daexecucao, levando em conta apenas dais princtpios basicos: a condicao de safda e a subdivisao em problemas menores,
Seguindo 0 metodo aqui apresentado, voce sera capaz de apliear a recursao aos sells programas sem maiores difieuldades. Aqui esra urn exempjo de corno essa tecnica pode melhora-los.tornando-os assim mais rapidos e COIDpactos.
10 BORDE~ 1: INR 7: PAPER 1: eLS
20 PllINT TAB 11 i INVERSB 1;" ORDENACAO ~
30 INPUT DQUANTOS NUMEROS VOC E QUER ORDENAR (1-10'00)
" ;A
40 IF A<l DB A)1000 THEN
Iii
10 CLS
20 PRINT @11. "ORDE'NACAO"
JO PRINT:INPUT· QUANTOS NUMEROS
VOCE QUE'R ORDENAR (1-10
00) "; 11
40 IF 11.(1 OR A>lOOO THEN 10 50 DIM A{A) .R(l+SOR(A)J
60 A(A)-lOO:PRINT-NUMEROS FORA DE ORDEM:-w~FaR K-O TO A-l:A(K) -INT'(EtND{-TlME)*99)+1 : PlAINT A(K ) i :NEXT:PRINT
70 L-O:LU-O:R-A-l:GOSUB 1000
80 PRINT"NI1MEJ:l,OS OIU)ENADOS:": FO It K=O TO A-i:PRINT A(lO;:N£XT 90 IF INKEYS<>~ ~ THEN 90 ELSE RUN
100>0 IF 11.)L THEN I~LiJ"R+l:V"'A( L):GOTO 1010
1005 RETURN
lOlO I~I+1:IF A(I)<V THEN 1010 1020 J~J-l:IF A(J})V TH~N 1020 1030 IF J)-I THEN T-A{I) :A(I)-A (J) :A(J)=T:GOTO 1010
lO~O T=A(L):A(L,=A(J) :A(J)=T 10S0 RCLV)=R:tVmLV+l:R=~-l:GOSU B 1000
1060 LV'"[.V-1:R .. It(LV} :L=I:GOSUB 1000
1070 RETURN
-
PROGRAMA DE OROENACAo
Compare a listagem do metoda de ordenaeao tipo bollia do artigo da pagina 468 com esta, que utiliza a recursao.
Nosso pregrama nao contem tantos desvios condicionais do tipo IF ... THEN. GOTO .... , nem tanras variaveis.
Inicialmente, 0 programa pede que voce introduza a quantidade de mlmeros randomicos que serao ordenados. A linha 50 dimensiona a matriz A(A), que armazena esses numeros, e a matriz R, que ira guardar 0 valor das variaveis durante 0 precesso recursive. A Iinha 60 gera e imp rime os numeros randemicos, ainda fora de ordem, e 31 linha 70 chama a sub-retina recursiva para ordenalos. A linha 80 e responsavel pela impressao final.
o metoda baseia- e na juncao de duas listas, ambas previamente submetidas a uma ordenacao. A Iista principal, composta de numeros randbrnicos desordenados, e dlvidida-em duas outras llstas (linhas 1010 e )020). Observe que, na linha lOOO, h3. urn teste de saida para determinar 0 fim da recursao. Cada uma das Iistas sofre entao urna ordenat;an parcial (linha 1030). sendo pesteriormente reunidas. A sub-retina ira charnar a si mesma (Unba 1050) ate que a ordenacao esteja completa,
Apesar dos metodos de ordenacao em BASI C nao serem tao rapidos quanto os que empregam linguagern de' maquina, este programa pode sec rnuito eficiente em tarefas menos extensas, Por exemplo, a ordenacao de cern numeros, no Spectrum, leva mais ou menos 40 segundos: a ordenacao tipo bolha nos faria esperar mats de uma bora.
APLICACOES
A utilidade da recursao vai muito alern do calculo de fatorials e outras funcoe marematicas. Ela pode ser aplicada na progsamacao de [egos e na consrrucao dos mais complexos gr<ificos. Essa teenica tambem aparece em sistemas de inteligencia artificial e no controle de robos,aMm de ser empregada em processamento de Iinguagens (compiladores e inrerpretaderes),
Os jogos de estrategia, como 0 XBdrez ou es wargames, constituem uma outra area interessante de aplicacao. 0 programa que apresentamos a seguir usa a recursao na simulacao de urn jogo classico, As Torres de Hanoi,
10 BORDER 6: PAPER 6: INK 0: c[.s
20 PRINT TAB 8: INVERSE 1:·0 TORRES DE HANOID~
30 INPUT -DIGITE 0 NUMERO DE ANEIS (2-91D"~N: IF NO OR N
)9 THEN GOTO 30 35 DIM T (3)
36 LET M-".o.": INK 2: FOR M -21 TO, 2l-N S'I'EP ~1: PRINt' AT M,7;A$:AT M,15:A$:AT M,23;A$:
NEXT M: INK 0
37 PRINT INK 2 :;AT 21,7; ~
,AT 21,15;".' .";'AT 21.23: .
...
38 FOR M-l TO N: PRINT INK 7 ; PAPER O;:AT 20-T(1) ,8;N+I-M:
LE.T T(l)-'I'(l)+I: NEX.T 1M
39 PRINT ill :AT 0.3; "QUAl.QUE.R TECLA PARA COMEC.AR"
40 PAUSE 0: PQINT Il:AT 0.3;" DoOODDDDDoDDDODOD"
45 LET TT~2: LEt' TF~l: LET R· 3
50 ClOSUB 90
70 PRINT AT 10.S:"NUM'ERO DE M OVIMENTOS~D~;2-N-l
80' STOP
90 IF N-O THEN RETURN
100 LET N"N-l: LET W R: LET R'" TTl [.ET TT-W: GOSUB 90: LET WII: LET R~TT: lET TT=W
no COSUB 200
120 LET WaR: LET R~TF: LET TrW: GOSUS 90; LET W-R: LET R-TF : LET TF"W
IJO LET N-N+l: RETURN
200 PRINT AT 20-(T(TF)-1) ,TF~8 i~O~: INVERSE l;AT 20-(T(TT». TT*8~N+l; LET T(TJ1-T(TF)-1:
LET T(TT)~T(TT)+l
210 SOUND .OI,TT"'T(TT)"2 220 RETURN
10 CLS:DIM 8(3)
20 PRINT @8,"TOR.RES DE HANOI·~P RINT
30 PRINT"N1.Jli!ERO DE ANEIS (2-9) 7-.
40 AS-INKEYS:IF A$<"2" OR A$)'"9 " THEN 40
50 N"'VA.L (AS) : H (0) -N: PRINT @64 60 FOR K-O TO 8:FOR J-O TO 2:PR INT @165+K*J2+,J*9.eRRS(175),+· .. +CBR$(17S) ::NEXT J,K
70 FO~ K-O TO 2:PRINT @451+K*9. STBINGS{3,175);:NEXT
BO FOR K-l TO N:POKE 1478-32*K. <;l9+1II-K:NEXT
90 'M'-l:TF'-O:R-Z 100 GO.SUB 1000
HO PRINT 1@65. "NUMEP.O DE HOVIME NTOS -·;INT(2A~-1)
120 PRINT~QUALQUER TECLA PARA RECOMECi\R"
130 IF IN:KEY$-~" THEN 130 14.0 RUN
1000 IIF N-O THEN RETURN
1010 N-N~l:W-R:R-TT:TT-W:GOSUB 1000:W-R:R-TT:TT-W
1020 POKE l<;l7S+9'11'TF-32"'H I(TF} .96 : H (TF) ,.'Ii (TF) -1: 1:1 (TT) -H (TT) +1 : PO KE 1~7B+9*TT-J2*8(TT).49+N
vareta, rnovendo urn por vez ,e sem deixar urn disco maior sobre urn men or . A terceira vareta serve como apoio temporario durante 0 processo,
o computador mostrara uma simula~a.o animada, pedindo, inicialmente, o numero de discos que sairao da primeira vareta. A transferencia destes sera bastante rapida, 0 Que dificulta a visualisacao des movimentos, Caso queira observar melhor 0 processo, faca as modtficacoes que se seguem. Para 0 Spectrum, introduza esta linha:
215 PA.USS 0
Para 0 TRS-Color. adiciane este comando ao final da Iinha ] 020:
~SOUND 50+H(TT) 1<10,12
No Apple e no TK-2000, acrescente:
175 FOR 1=1 TO BOO:NEXT
Para 0 MSX, adicione esta linha: 165 BEEP:FO~ 1=1 TO BOO:NEXT
a programa e semelhante aos anteriores, A retina recursiva executa cada
" .~
]0 PRINT ~ PRINT ~ IN.put" NUMERO DE ~~'J. • ;;,l.. ( .. ;,
120 GOSUB 150 t 130 W-II: R-TF: TF-W: GOSUB 100: W-R a
: a-TF : TF"W -r
140N'-N+l : RETURN .'
150 T{TF)-T{TF)+1~LOCATE TF*lG., .'
T(TF) :PRINT- .. :tr. -."l
HiD LOCATE TT*lO. T (TT) : PRINT .N: . ~ (
T(TT)-T(TT}-1 -~
170 RETURN I:' ~
Quando 0 jogo comeca, varia discos de dliametros diferentes acham-se empiIhados sobre a primeira de tres varetas monradas sobre '0 tabuleiro . .0 objetivo e passar todos os discos para a segunda
movimento sueessivamente, ate que todos as discos estejam na segunda varetao No fim, 0 computador tambim exibe 0 total de movimentos realizados.
Apesar de poderosa, a recursao pode set inconveniente quando ba uma grande limitacao de memoria, roubando mais espaco e mais tempo do que 0 neeessario. Porem, se nao ba tal impedimento e se em seu programa uma subretina e cham ada mais de duas vezes, prOCUIe aperfeicoa-lo com essa tecnica.
_,
1:(.1' : •
"
• •
Nem tudo e desastre no caminho
de Willie. Para que nao sa desespere totalmente. as vezes e recompensado. conseguindo chegar ac topo da montanha e recuperar seu lanche.
Nenhum outro aventnreiro conheceu tanto infortunios quanto Willie. Nosso personagem ja experimentou ate a mane e a deseida para 0 inferno. Mereee, agora, uma recompensa: finalmente, ele conseguira alcancar 0 topo da montanha e recuperar mais uma parte do lanche perdido, conquistando, assirn, alguns pontes no placar,
A pequena rotina inicial executa a melodia da recornpensa, coloca WiJEe no proximo nlvel, aumenta a velocidade do jogo e incrementa 0 placar.
10 REM Of'" 59788
20 BEMrvd ld oe_,523 30 REM Id hl,B06
4.0 REM call 94.9
50 REM Id il, (57344) 50 REM lnc il
70 REM rea 2,il
80 REM lel (57344) ,il 90 REM lel a, (58732)
100 REM dec-a
110 REM Id (58732) ,iI. 120 REM Ld a,2
130 REM tel b,5
140 I:lE.M call- 59900 150 REM jp 58601
As tres pr.irneiras instrucoes, encarregadas da m u sica, u sam a retina BEEPER no endereco 949 da ROM. Os pa-
rametros da duracao e da tonalidade sao fornecidos pelo metodo usual. atraves dos pares de registros DE e HL
a NiVEl DO JOGO
o nlvel de dificuldade do jogo e carregado da variavel correspondente, em 57334, para 0 acumulador. 0 conteudo do acumulador e em seguida incrernentado. Preci amos, porem, impedir que seu valor seja maier do que 3, ja que existem s6 quatro nfveis de dificuldade, Para isso, usarnos a instrucao res 2, a que ajusta com 0 0 bit 2 do acurnulador. Quando 0 valor deste chega a 4, 0 bit 2 e colocado em O. 0 eonteudo do acumulador volta, assim, a 0, trazendo o jogo para 0 primeiro nivel,
a resultado dessa operacao e armazenado no endereco 57334, onde sera utilizado ao se ajustar 0 jogo.
A VELOCIDADE
o valor do atraso do jogo - que fica no endereco 58732 - e carregado no acumulador, decremenlado e armazenado de volta em 58732. Aceleramos, assim, 0 jogo, urna vez que 0 tempo gasto pelo processador no laco de atraso da retina principal diminui.
o atraso foi originalmente ajustado
com 50. Como Willie nao chegara a recompensa mais do que cinqiienta vezes, o jogo se tomara cada v·ez rnais rapido - e, portanto, mais dificil. Cada vez que voc~ enfrentar as mesmos quatro nivei ,ele estarao mais rapidos,
CaNT AGEM DE PONTOS
POI ter alcancado 0 premio, Willie recebe mais 500 pontos. Para isso, chamamas a rat ina do escore no endereco 58900 e fornecemos os parametres no registros A e B.
o valor 2 colocado em A especifica a segundo digito a partir da esquerda - o das centenas -, que era incrementado. a valor 5 em B informa a retina a mimero de vezes que esse digito deve ser aumentado. Incrementando as ceutenas cinco vezes, acresceatarnos 500 pontes ao escore,
Em segulda, 0 processador volta para a rotina de nova vida - rotulada 01 -, em 58601, e coloca nosso personagem na base da enco tao
o PLACAR
A pequena rotina apresentada a seguir acerta 0 placar de Willie Quando ele alcanca uma recornpensa au escala uma outra parte da encosta.
_'"
DlMAoUlNA 41
II
• NlvEL DE DIFICULDADE 0 PREMIO
..:::::.=-' __ ----:--=-=:-=":-F..::-UN,D ° MUS ICA L -::=.=-- __ --....:C'-':0;::-7NT=A.-::;-G EM DE PONT OS
• ACELERAQAO DO RITMO EXIBICAO DO PLACAR
-=---------'--=--===""--' DO JOGO. ALTERACAO DOS DIGiTOS
WILLIE ALCANQA • DE VOLTA AD SOPE
I
10 REM orQ 59900
20 REM sen Id ix.57337 30 REM Id d.O
40 REM Id e.a
50 REM add ix.de 60 REM B~r p~ah ix 70 REM call adi
80 REM pop ix
90 REM djnz Bcr
100 REM call 58939 110 REM ret
120 REM adi Id a, (ix+O) 130 REM inc a
140 REM cp 10
150 REM jr nZ,sno 160 REM Id a,a
170 REM Id (lx+O) ,a 180 REM dec lX
190 REM jr sdi
200 REM ano i e (~x+O) ,a 210 REM ret
A posicao de memoria 57337 corresponde aD inicio da variavel do escore, que e carregada com 0 pela rotina de ini-
~...______...
clalizacao dada no artigo da pagina 995.
o registro 0 e carregado com 0 e E. com
o conteudo do acumuJador. Lembre- e de que 0 acumuladur carrega 0 mimero de coluna quando 0 processador entra nesta retina.
o conteudo do par DE e adicionado ao conteudo de IX e 0 resultado penna-
I
II
nece em IX. Isso faz com que a apontadar de dados percorra as dlgitos armazenados a partir de 57337. ate chegar ao e pecificado pelo conteudo de A. A posi~ao e temporariamente armazenada, colocando- e 0 conteudo de IX na pilha. A rotina sdi e ehamada.
AL TERANDO OS OiGITOS
A retina sdi e a que trata do digitos.
Ela comeca carregando 0 acumulador com 0 dlgito apontado par IX. 0 deslocamento do 0 e necessario aqui por causa do formato da tnsrrucao.
o digito e eutao incrementadoe comparado com JO. Se ele for 10, sera preciso incrementar tambem no proximo digito. Caso contrario - ou seja, se 0 primeiro digito ainda na~ foi incrementado ate 10 -, a lnstrucao jr nz manda o processador para 0 rotulo sno, que volta a armazenar 0 digito incrementado na posi~ao de onde veio.
Se 0 digito que voce esta aIterando foi incrementado ate 10, 0 salta nao ocorre e 0 processador continua com a proxima Instrucao. 0 valor 0 e armazenado no dlgito apropriado, Em seguida, IX e decrementado, passando a apontar para 0 digito imediatamente a esquerda. A instrucao jr sdl manda entao o proeessador de volta para sdi, iniciando aovamente a retina de incremento no proximo digito.
Se este Ioi incrementado ate 10, 0 processador continua no Iaco. Mas, cedo ou tarde. urn digito que nao chegou a 10 sera encontrado. 0 processador ira entao para SOO, artnazenando 0 ultimo digito e retornando para 0 lugar da rotina cr de onde sdi foi chamada.
MAIS PLACAR
Quando 0 processador retorna da retina, 0 apontadorDt e recuperado da pilha outra vez. Voce pode agora perceber por que precis amos armazena-lo ali: se 0 dfgito foi incrementado ateIt), sdi tera deslocado 0 apontador 1)( para 0 digito segulnte; case voce tente incrementa-lo mais uma vez, ira a1terar 0 drgilO errado.
o laco de ta parte da rotina e fechado por uma instrucao djoz, que deerementa 0 conteiido de Bate zera-lo. Como voce deve se lembrar, B carrega 0 ruimero de vezes que 0 digito do escore tern que ser incrementado quando 0 proce sador entra na retina.
o processador continua no laco atualizando 0 escore a numero de vezes inicialmente especificado pOI B. Quando
B chega a 0, a rotina de irnpressao em 58939 e chamada, imprimindo 0 novo escore na tela.
Em seguida, 0 processador retorna.
Esta pequena retina executa a melodia da recompense, coloca Willie no proximo nlvel, ace1era 0 jogo e aerescenta pontes no placar.
10 ORG 20721
20 RWO LOA '255 30 LOX U50
4.0 JSR SOUND
50 LOA 18238
60 INCA
70 ANDA ']
IIIIIIIIIUI
STA 18238
DEC OLL+1
LOB ,5
LOA .3
JSR SCI
LBRA NLV
SCI EXG A.B SCT LOX 118240 ABX
PSBS A.X JSR BDl PULS A.X DECA
BNE SCT JSR pR.se RTS
SOl LDA.X INCA
CMPA +10 BNE SNO eLR .X LEAX -l.X BRA sor SNO STA .X RTS
SOUND PSHS A LOA SFF01 ANDA '247 STA SFFOI LOA SFF03 ANDA 124.7 STA SFFO) LOA $FF2) ORA ,8
STA SFF2J ORCC,SSO puts A
PSHS X
LOB j252
SBN STB $FF20 se LE,l>,X -l.X BNE SC
LOX,S
era SFF20
SD LEAX -l.X BNE so
LOX .S
DECA
SHE SBN MDCC tSAF PULS x
RTS
CLICK LOX 198 LOA 14
JSR SOUND
RTB
OLL EQU $51EO NLV EQU $4BF7 PRSC EQU $4e77
As tres primeiras instrucoes, encarregadas da musica, usarn a rotina SOUND, chamada pela Iinha 40. Os parametros da duraeao e da tonalidade sao fornecidos pelo rnetodo usual, atraves de numeros carregados em A e X.
NfvEl DE DIFICULDADE
A e carregado com 0 eonteudo de 18238, a posicao de armazenarnento do
nfvel de dificuldade, Esse valor e incrementado e a cperacao AND e feita com o numero 3. Apagamos, assim, os seis bits rnais signlflcativos e evitamos que o myel do jogo ultrapasse 0 valor 3. O' resultado e armazenado de volta na posicao 18238.
Em seguida, a variavel na posicao de memoria $5 LEE e decrementada e 0 iogo se torna urn pouco mais rapido.
Para atualizar 0 escore, carrega-se 5 em B e 3 em A; a retina SCI, fomecida a seguir, e entao chamada. B carrega 0 mimero de vezes que 0 digito sera incrementado e A identifiea esse digito. Desta vez, portanto, acrescentarnos 500 pontos ao escore,
Finalrnente, 0 process ad or volta para a rotina NL V, que ira colocar a proximo nivel na tela.
CAlCUlO DO PLACAR
Para serem utilizados na proxima rotina, os conteudos dos registradores A e B precis am ser trocados, Isso e feite pela lnstrucao EXG. X e enHio carregado com 18240, 0 endereco inicial dos valores do escore.
ABX adiciona a X 0 conteudo de B - que eo nurnero do digito a ser incrementado. Em outras palavras, essa instrucao desloca a aponta.dor em X, que estava no Inlcio dos dados do escore, para a pos.icao do wgilo que e pretende incrernentar. 0 conteiido de A (0 mimero de .... ezes que 0 digito sera incrementado) e 0 de X (a posicao de memoria desse digito) sao colocados na pilha de maquina. Ern seguida, 0 processador salta para a sub-retina SDl que executa o incremento. Os conteudos de A eX sao recuperados da pilha.
A e deerementado e, se nao tiver chegada a 0, a instrucao BNE SCT manda o processador continuar no laco. A rotina de incremento do df.gito e executada A vezes, incrernentando 0 dIgito apropriado a cada volta do laco.
Com A reduzido a 0 e 0 escore acertado, 0 processador sai do laeo e vai para a retina PRSC, que impcime 0 resultado na tela. Depois disso, 0 processadar encontra RTS e retcrna para a rotina principal.
Al TERANDO OS DiGITOS
A e carregado com 0 conteudo da poslcao de memoria apontada par X. Este corresponde ao numero contido no dfgito apropriado do escore,
Onumero e incrementado e 0 resultado e comparado com 10. Se ainda nao,
for igual a 10, a instrueao 8NE coloea o processador no rotulo NO, que volta a armazenar 0 digito que foi incrementado no endereco apontado por X.
o processador retorna.
Se 0 resultado for igual a 10, 0 d1gito apontado par X e ajustado com 0 - au eja, e lirnpo, X e entao decrementado, fazendo 0 apontador se mover para 0 digito imediatamente a esquerda.
BRA SDI ruanda 0 processador de novo para a laco de incremento de digito. Depois que 0 proximo digito e lncrementado, verifica-se se ele ultrapassou a valor 9. Encontrando urn digito que nso exceda 0 valor maximo, 0 processador 0 armazena na posiceo apontada por X. Observe que, ao voltar da rotina de escore, 0 processador recupera 0 valor de X da pilha.
A retina SOUND trabalha exatamente do mesmo modo que a rotina encarregada de executar Greenleaves. Porem, toea apenas uma vez e usa a pilha como fonte de dados.
Depois de OUND, ha uma outra pequenarotina chamada CLICK. Ela executa a trilha sonora da carninhada de Willie, carregando os parametres em X e A e chamando a retina SOUND.
Para testar a rotina, use as teclas M e N e este programs em BASIC.
10 POKE 3000,57
20 EXEC 194.26
30 EXEC 19902
40 GOTO )0
ultrapassar 3. Para evitar que isso ocorra, utilizamos a instrucao res 2,a, que ajusta com 0 a bit 2 do aeumulador. Assim, quando 0 valor incrementado chega a 4, a bit 2 e aj ustado com 0. 0 conteiido do acumuJador volta, entao, a 0, colocanda 0 iogo novamente no primeiro myel.
o resultado dessa operacao e annazenado em - 5228, onde a novo valor sera utilizado no controle do jogo.
1JO orQ 55532
140 PO Id hl.-5219
150 Id cI,Q
160 Id e,a
170 a.dd hl,de
l80 pel push 'hI
190 call sd 200 pop hI
210 djnz pel 220 ca.ll 54023 230 ret
24.0 sd Id a, (hI) 250 inc a
260 CP 10
270 jr nz,en 280 ld a,a
290 Id (hI), a 300 dec hI
310 jX' sa
320 an lei (hIl, a 330 ret
340 end
A posicao de memoria - 5219 cortesponde ao endereco inicial da variaveis que contern as digitos do escore, carregadas com 0 pela rotina de inicializacao dada em artigo anterior. 0 registro D e carregado com 0 e a registro E, com 0 conteudo do acumulador, Lernbre-se de que 0 acumulador carrega 0 mimero do digito quando 0 processador entra nesta retina.
o conteudo do par DE e somado em HL. A operacao faz 0 apontador de digites percorrer as variaveis onde seus valares estao armazenados, a partir de - 5219, ate 0 digito indicado pelo contendo de A. 0 conteudo de HL e colocado na pilha, on de Iicara temporariamente armazenado, e sd e ehamada.
VELOCIDADE
o atraso do jogo em 54133 e colorado no acumulador , decrementado e armazen ado de volt a em 54133. Isso acelera 0 jogo, ja que 0 tempo gasto pelo processador no laco de atraso da retina principal diminui.
Como voce podera verificar na ultima retina da serie Avalanche, esse atraso foi originalmente ajustado com 50. Assim, sernpre que aumenta 0 rnimero de pontos no placar, 0 jogo se torna mais rapido e dificil. Cada vez que voce enfrentar os mesmos quatro niveis, a velocidade sera maior.
CONTAGEM DOS PONTOS
Por ter alcancado 0 premio, Willie recebe mais 500 pontes. Para isso, chamamas a rotina de contagern e fornecemos as parametres nos registros A e B. 0 valor 2 coJocado em A especifica 0 segundo digito a partir da esquerda - a das centenas -, que sera inc:rementado. 0 valor 5 em B inforrna a rotina a nurnefa de vexes que esse digito deve ser aumentado. Incrementando as centenas cinco vezes, acrescentamos 500 pontes ao esco:re. Em seguida, 0 processador vai para a rotina principal do jogo, em 53888, e coloca Willie na base da encosta.
Al TERANDO OS OiGITOS
E ta pequena retina coloca Willie no nfvel seguinte, aumenta a velocidade do jcgo e acrescenta os pontos ganhos ao placar.
A retina sd, que trata dos digitos, corneca carregando a acumulador com 0
10 oro 55506
20 ld a, (-5228) 30 inc a
40 res 2,a
50 lcl (~522B), a 60 ld a, (54133)
70 d;ec a
80 ld {54133),a 90 lcl a,l
100 Id b,5
110 call 55532 120 jp 53888
o PlACAR
,/
A pequena rotina que se segue acerta os ponrosde Willie quando ele alcanca uma recompensa ou escala urna parte da encosta.
o NjVEl DE DIFICUlDADE
o nivel de dificuldade do jogo e rransferido da variavel equivalente em - 5228 para a acumulador. A seguir, 0 conteudo desse e inerernentado. Como existem apenas quatro niveis - llP" jogo, 0 valor dessa variavel nao deve
II
valor do dfgito apontado por HL. Este e inerementadoe comparado com 10. Se for igual a 10 - ou seia, se ultrapassou o maier valor de urn dfgito decimal, 9 -, sera precise incrementar a proximo digito. Se 0 digito anallsado ainda nao ultrapassou 9, a instrucao jr nz ruanda o processador para 0 rotulo so, que arrnazena seu valor na variavel cortespendente.
Quando 0 dlgito Que esta sendo alterado chega a 10, 0 salto nao ocorre e 0 processador continua com a proxima instrucao. 0 valor 0 e armazenado nesse digito e 0 par HL e decrementado, passandn a aponrar para 0 digito imediatamente a esquerda. A instrucao Jr sd manda 0 proeessador de volta para sd e a retina de incremeruo recomeca para a proximo digito.
Se este tambem ja ultrapassou 9, 0 processador continua no laeo. Mas, cedo ou tarde, urn dfgito que nao ehegou a 10 sera encontrada. 0 processador ira entao para sn, armazenando 0 ultimo dfgito e retornando para a Iugar da rotina pd de onde sd foi chamada.
,
MAIS fLACAR
Quando 0 processador retorna da ro tina, 0 apontador HL e reeuperado da pilha, Voce pode agora perceber por que precisamos armazenaeo ali: se algum dl-
I
III1
gila foi incrementado ate 10, a retina sd tent deslocado 0 apontador, Caso nao tivessemos armazenado a valor lnicial na pilha, desta vez estariamos alterando 0 dlgitoerrado.
o lace e fechado por uma instrucao djnz, que decrementa 0 conteudo de B ate zerar esse registro. Como voce deve se lembrar , B carrega 0 mimero de vezes que a digito do escoretem que ser incrementado quando 0 processador entra nesta retina,
o processador continua no Iaco pd atualizando 0 escore 0 numero de vezes .inicialmenteespecificado per B. Quando B chega a 0, a retina deirnpressao dos digitos em 54023 e chamada, imprirnindo a novo escore na tela.
Em seguida, 0 processador reterna,
()SDADOS VAOIROl.AA
'ROGRAMA~O DE lOGOS
45
INPUT apresenta, final1rnernte, urn joga de, computador projetado para varios particiipantes. Re(ma a familia e as saus amigos e role os dados nasta brincadeira de sorte e de pericial.
Ale aqui, a maioria dos jogos de IN~ PUT - sejarn os de aventura, estrategia ou videogame - basearam-se DO confronto computador-usudrio. A maier dificuldade nesse tlpo de disputa estava, como vimos, na crlacao de regras e situaeoes que sirnulassem desafio OU, 110 case dos jogos de estrategia, na transformacao do cornputador em urn adversario inteligente e de bom nivel. 0 [ogo que apresentamos neste artigo e diferente: a confronto pode Sf dar entre ate seis jogadores, 0 computador nao participa como adversario - cabe-lhe apenas conferir as regras e mantel' 0 placar. A maquina evita, assirn, que' alguem rrapaceie, e, 0 que e melher, Iibera as jogadore da contagern do placar, possibilitando que se concentrem 56 nas questoes esrrategicas.
-Este jogo nao passa de uma versao computadorizada do famo 0 Yale;", Oll poquer com dados, Combinando sorte e estrategia, e multo absorvente, mas suas regras sao simples, parecidas com as do paquer. Cada particlpante tern direito a jogar cinco dados de uma so vez (no nosso caso, 0 cornputador simula os dados rclaado). Se 0 jogador nao estiver satisfeito com 0 resultado obtido, podera Iancar os dados mais duas vezes (nUID total de tres jogadas) .. Na segunda e tercelra jogadas, e permitido escolher quais dentre os cinco dados serao Iancados novamente, para que se consiga a rnelhor • 'mao" possfvel, Depois do terceiro lancarnenro, 0 jogador deve indicar 0 grupo do plaear no qual 'sua combinacao de dados vai ficar (cada grupo paden! ser usado apena uma vez). A partida continua, entao, com 0 proximo jogador.
o grupos de placar sao:
GRUPO UM DOIS
PON' OS
soma dos I obtidos soma dos 2 obtidos
SEIS soma dos 6 obtidos
FULL HOUSE soma des cinco dados
CURTO ]5
LONGO 30
MISTO soma dos cinco dados
YATCH 50
Urn CUR TO e urna combinacao de quatro dados em seqtlencla (J ,2,3,4 ou 2.3,4,5) e um LONGO, urna combinaCaD de cinco dados tambern em sequencia (1,2,3,4,5 ou 2,3,4,5.6). Urn FULL HOUSE cornpoe-se de urna rrlnca e urn par (5,5,5,].1. par exernplo), enquanro urn MISTO, como seu proprio nome diz, aceita qualquer tipo de eombinacao de dados, 0 YATCH, Iinalmenre, e 0 grupo formado por cinco dados iguais,
Ore ultado obtide numa jogada deve ser colocado num dos grupos. Lembre-se de que s6 se pode indicar cada grupo uma vez. Para selecionar a grupo e executar a escolha u am-se as setas e a barra de espaco.
Muitas vezes nao e posslvel obter uma cornbinacao de dados que satisfaca urn dos grupos vazlos (os grupos cheios nao podern ser utilizados novamente). Neste caso, a unica oPlVao e sacri ficar urn dos grupos vazios - de preferencia, urn dos que rendern menos pontes -, eliminande-o, A melnor estrategia, portanto, e preencher primeiro os grupos que rendem mais pontes ~ que sao tambem 0 mals diflceis - evitando-se que venham a ser sacrificados.
o programa esta dividldo em tres partes principais: retina de inlciaJizacao, Iaco-mestre e retinas charnadas pelo laco-mestre.
IINICIALIZACAO
Esta parte do programa configura os UDG (graficos definidos pelo usuario) que representarao os dados na tela (menos nos micros das Iinhas Applee TK-2()(x)), inicializa as variaveis e armazena os nornes dos jogadores.
o laco-mestre compoe-se de tres laCOS encadeados (urn dentro do outro) que controlam 0 jogo. Reo numero da partida; 1, a numero de jogadas denrro de uma partlda IS N. 0 numero de [ogadare . As retinas chamadas par esse Laco Iazem os dados tolar e apresentam as placates parcial e final. Todos os micros .• menos 0 Spectrum, chamarn uma pequena retina para centrallzar as names na tela. Asrotinas chamadas pelo laco-mestre tambem sao subdivididas, como veremos a seguir,
OS DADOS VAO ROlAR
A primeira dessas retinas rola as dados, exibe-os na tela e chama duas autras rotinas.
Acrescente as linhas que se seguem a parte' do programa ja digitada:
190 T .. l:FORD"lT05:T{D)=lNT(IINO( -TIME)"6}+1:NEXT
41
. . ( . ,
200 LoeATEO.T"'2+3:PRINT"JOGO~IT
210 GOSUB970:IFT .. 3 THEN 310 220 CE1:FOR D~l TO 5
230 LOCATE9+D"'(,9;PRINT~?ft
24.0 AS .. mRE¥$: IFAS<>"N~'ANDAS<>" n"ANDAS<>"s"ANDA$<)"S"THEN24.0 250 IF A$-"N·ORAS-~n"THENPLAY"O lL64CBIt:GOT0270 .
No primeiro lancamento, utilizam-se as cinco dados .. 0 resultado e exibido na tela par meio da rotina da Iinha 970 (1180, DO Spectrum). 0 jogador escolhe entao quais sao as dad os "bans" e quais sao as "ruins", indicando os primeiros com urn Seas segundos com urn N. Ele teramais duas chances de lancar as dados ruins, devendo teelar S(im) par-a os dados que que, "segurar' e N(ao) para as demais ..
Os mimeros dos cinco dados iniciais sao armazenados na rnatriz T(). Depois do primeiro lancamento, os dados que "seguramos" san guardados temperariamente na matriz R( ), que e preenchida com outros valores randomlcos ate ficar com cinco tnimeros. Esses vaJores Sal) levados de volta para a matriz T( ) por meio da retina da linha 340 (420, no Spectrum). Os resultados sao exibidos na tela. mais uma vez e 0 processo se repete no proximo lancamento.
a PlACAR
A maier parte da rotina dedica-se aos calculo do placar e a verlricacac de entradas,
450 PRINT INI< S;:AT 1.5;NS(NI) i INK 4.~AT 2.1;"Yr1f PLACAR U" 460 RES,TORE 1280: FOR M"'4 TO 17: READ A~: PRINT AT M,l~A'; QS{ TO II-LEN A$);: IF M<>16
, THEN PRINT" : " 470 NEXT to!
480 GOSUB 530
490 GOSUB 560; GOSUB 530
500 ~RINT FLASH l:AT 20.18;~Q UALQUER TECLA-:AT 21,lBi~PI CO NTINUAR
510 LET AS-INi<EYS: IF AS-u 'J:'HEN GOTO 510
520 RETURN
530 FOR D-l TO 12: IF P(N,D)-l THRN PRINT AT 3+D,13:ftX"
54.0 IF O(N,D)<>O THEN PR1NT AT 3+:D,13:0 (N. D)
530 NEXT 0: LET (: .. 0: FOR D-l TO 12: LET C=C+O(N,D): NEXT D:
PRINT AT 17.13;C; RETURN
560 PRINT AT 8.lS;"TEMPO ":11.,; AT 9.1Bi~SECAO ";1
570 PRINT AT 2.1B:~RESULTADO": L£T T~-l: GOSUB 1180
580 PRINT AT 5.16i"ESCOLHA 0 G RUPO~
590 LET A=4
600 PRINT AT A.15;CHRS 150 610 LET BS"INKEY$: IF BS,.. .... THEN GOTO 610
620 .IF BS ...... TB£'N LET A=A-]:
GOTO 710
630 IF B$~~K~ THEN GOTO 650 640 IF BS<>·M- THEN GOTO 610 650 PRINT AT A,lS;· ..
1660 IF SS"'''K~ AND 11.=4. THEN O,OTO 600
670 IF 8S .... M" AND A=15 TBEN GOTO 600
680 IF B$ .... M" THEN LET 11.-11.+1 ,690 IF BS-"Kft THEN LET A%'\-1 700 SOUND .01,5: GOTO 500
710 PRINT AT 11.+3,15;- ": IF P{ N.A)<>O THEN GOT a 1240
720 IF A)6 THEN GOTO 780
730 LET e-o
740 FOB D-1 TO 5: IF r(D)~A TYEN LET C-C+1
150 NEXT 0
760 LET O(N.A)~C~A
770 LET P (N ,A) -1: RETURN
780 IF A-II THEN FOR D~l TO 5 : LET O(N,ll)-O{N.ll)+T{D):
NEXT D: LET P(N,l1)~1: RETURN 790 FOR D-i TO 5: LET D(D)-O:
NEXT D: LET B-O: FOR £-1 TO 6:
LET C-O: FOR 0-1 TO 5: IF T{D) -E THEN LET e~C+l
BOO NEXT D: IF COO THEN LET B-B+1
BID NEXT E
820 LET G"'I: FOB ral TO 6:
GOSUB 1250: IF C<>O THEN LET D(G)"F: LET G-O+l
830 NEXT F
840 LET P(N,A)"I: IF A.7 THEN ClOTO 9S0
850 IF A-B THEN COTO 1010
860 If A-9 THEN GOTO 1050 870 IF A-10 THEN GOTO 1120 890 IF A-12 TH&N aOTO 1160 950 IF 8>2 THEN GOTO 1190 960 IF B-1 THEN casus 1270; LET O(N,7)-C: RETURN
970 LET' F"l
9BO GOSUB 1250: LET r-F+l: IF C<)4 AND F()7 THEN GOTO 980 990 IF C<4TREN GOTO 1190
1000 L£T 0 (N, n ""l.1r (F-l): RETURN
uno IF 8<>2 THEN G01'O 1190 1020 LET r-O(l): GOSUS 1250: IF
C-J THEN GOTO 10(0
1030 LET FooD (2)1: GQSUS 1250: IF
C<>3 THEN GOTO 119Q
1040 LET OeN,B)-O: FOR G-l TO 5 ; LET 0(N,6)-O(N.8)+T(G): NEXT G: RETURN
1050 IF 8<>4 THEN GOTO lOBO 1060 GOSUS 1270: IF C<>1B AND C <>10 AND C<>14 OR (C-14 AND D(~ )-6) THEN GOTO 1190
1070 LET 0(N,,9)-15: RETURN
1080 IF B<>5 THEN GOTO 1190 1090 OOSUB 1270: IF CoolS OR Cal 6 OR C-19 THEN OOTO 10'70
1100 IF C<>20 THEN GOTO 1190 1110 GOTO 1070
1120 IF B<>5 THEN OOTO 1190 1130 OOSUB 1270: IF e-IS On_C~2 o THEN GOTO 1150
114 0 (101'0 1190
1150 LET O(N,10)-30: RETURN 1160 IF B<>1 THEN OOTO 1190 1170 LET 0(N.,12)-SO: RETUR.N 1190 SOUND .5.5: PRINT AT 210,18 ;~ILEaAL !W,AT 2l,18;"ELIMINA 1
..
1200 L~T AS-INKEY$! IF A$-·~ TB EN 001'0 1200
1210 IF AS-"N" THEN PRINT AT 2
0.18," ";AT 21,18,"
OF: LET P(N,A)"O: GOTO 590 1220 IF A5<>-8· THEN aOTO 1200 1230 LET P(N,A)"'l: RETURN
12~0 SOUND .5.5: PRINT AT 20.18 ; "GRUPO OCUPADOw: FOiR H-l TO 30 0: NEXT 81: PRINT AT 20,18:"
": GOTO 590
1250 LET C=O: FOR D~1 'FO 5: IF T{D)-F THEN LET C-C+l
A prirneira secao de sa retina - que vai ate a linha 520 110 Spectrum e linha 4.50 nos outros micros - mostra nIB te-
la 0 esqueleto do placar (names dos grupos e do jogador) e chama dluas outras retinas para preeucher 05 grupos e re ceber a Llltima entrada.
Aretina constituida pelas tres linhas seguinte preenche a esqueleto com 0 placar anterior e fornece a soma dos totals. Depois dela enconrra-se uma rotina major, incumbida de receber e analisar as entradas,
As primeiras Iinhas dessa retina apresenram na tela informacces sabre 0 011- mero da partida e da jogada e, 0 que e mai importante, mosuam a cornbinaCaa final obtida. As Iinhas seguintes, alem de Identificar a tecla que esta sendo pressionada, movem a cursor para cima e para baixo 110 esqueleto. Para a movlmenracao do cursor, 0 Spectrum usa as teclas M e K; 0 MSX e 0 TRSColor, a setas, eo Apple e 0 TK-2000, as teclas Q e Z.
Quando se pressiona a barra de espaco 0 programa interprets que 0 grupo apontado pelo cursor foi escolhido. A posicao do cursor e armazenada na variavel A, onde A = 1 corresponde a posi~ao do grupo dos UM, A=2 equivale a posicao do grupo dos DOIS e assim por diante ate A = 11, que cortesponde a posicao do YATeR. 0 valor de- A e usado pelo restante da retina paw, ra calcular a ponruacao do placar ,
Uma outra variavel importante e a variavel B, que coatem 0 mimero de dades diferentes entre si: B = 2 (dois tipos de valores), par exernplo, representaria uma FULL HOUSE e B=.5 (cinco tipos de valores), lim LONGO.
Portanto, dependendo do valor de A, retinas diferentes sao chamadas para verificar se a cornbinacao dos dados realmente eorre ponde ao grupo escolhido. Se corresponder, 0 placar e calculado e apresenrado na tela. Caso contrarlo, a mensagem "ILEGAL" e exibida. 0 jogador decide, entao - com om S au I1Ul N ~, se 0 grupo deve ser eliminado , a computador verifica tambern quais grupes ja foram usados,
RESUl TADO FINAL
Esta ultima secao slmplesmente apresenta na tela 0 placar final, com os ponres dos jogadores em cada partida. 0 mimero da pertida e exibido no tope do placar final e os names dos jogadores mail) abaixo, a. esquerda,
1090 FORD"lTONP:C·O:FORE"'lTOR:C cC+S(D,E) :NEXTE:LOCATE26.3+D:PR INTC I : NIi:XTD
llOO LOCATE2. 19: PRINT" < qu.a1Que r tec1a para outra rodada )" 1110 A$-INKEY$:IFA$-"·THENIIIO 1120 FORE"lTONP: FORO"IT012:0 (E. Dl-O:P(E,D)-O;~EXTO.E
1130 RETURN
990 HOME: INVERSE : PRINT "» »»»») PLACAR FINAL ««« ««<": NORMAL
1000 VTAB (5): FOR D = 1 TO NP ~ PRINT LEFT~ (N${D) ,lO}: NEXT
1020 1030 C + NEXT 1040
o ..
XT 1050 PRINT ~ TOTAL"
1060 FOR 0 ~ 1 TO NP
1070 FOQ E ~ 1 TO II.
1080 HTAB (9 + E .. 4): VTAS «(
+ D): PRINT SeO,E};: NEXT E,D 1090 FOR D & 1 TO NP:C ~ 0: FO R E • 1 TO R:C - C + 8(D,E): NE XT E: STAB (33): VTM (4 + DJ! PRINT C.: NEXT D
1100 STAB (2): VIAS (22): PRIN T ~< QUALQUER TECLA PARA OUTRA ROOA.OA :>";
1110 GET A$: IF AS ~ ~n THEN 1 110 1120 1 TO NEXT 1130
FOR 0 = 1 TO NP
C Q 0: FOR If: = 1 TO 12:C '"' O(O,E): NEXT :SCO.R) ~ C:
D
FOR D ~ 1 TO 5: STAB (9 + 4); VTAB (3): PRINT 0;: NE
FOR E .. 1 TO NP; FOR 0 ~ 12:0(E.,D) = O:P'E,D} ~ 0:
D.E RETUR.N
Ei
1290 BORDER 7: PAPER 7: INK 3: elLS
1300 PRINT -**********PLACAR FI NAL****"'*****"
1310 PRINT AT 7.0: FOR D-l TO N P: PRINT N$(D);- :ft", NEXT 0 1320 PRINT INI< l.;AT 3"O;-JOGAD OR~i INK 2,AT 3.13;NT E M P 0" U30 PRINT AT 5.12 i: FOB. D .. l TO
1380 PRINT INK ~;AT 6+0*2.4+E* 4;9(D,£): NEXT E: NEXT D
1390 FOR D-1 TO NP: LET C~O: FO R E-l TO R: LET C=C+S(O,E) ~ NEX T E: PRINT AT 6+D*2,28;C: NEXT o
1<100 PRINT U; INVERSE 1; INK 0 ;n QUALQUER TEctA PARA CONTINUA :R "
1410 LET A$=INKEY$: IF &$_an TH EN GOTO lotIO
14.20 FOR £=1 TO NP: FOR 0-1 TO 12: LET O[£,D)-O: LET P(E.D)-O:
NEXT D: NEXT E 1430 R.ETURN
9901 CLS: PRINT" ****wTABELA DE PO NTOS*1rJII*"'''
1000 PRINT @128:FOR 0 .. 1 TO NP:P RINT N$(D) :NEXT
1010 PRINT @75,wR 0 U N DW 1020 FOR 0-1 TO NP
1030 C-O:FOR F;al TO 12:C-C+O(D, E):NEXT:S(D.a)~=:NEXT 0
1040 .FOR D=1 TO 5: PIUNT @9B+ow4
,0; : NEXT
10SQ PBINTn TOTAL- 1060 FOR 0=1 TO NP 1070 FOR £-1 TO R
1080 PRINT @129+D"'32+E*4., S I(D. E) ; :NEXT E.O
1090 FOR 0"1 TO NP:C-O:FOR E~l TO R:C"C+S(C,E:):NEXT E:PRINT @1 53+D*32,Ci:NEXT D 1100 PRINT @44B," LA PARA Pr..,)XlMA 1110 AS-INKEY$:~F 10
1120 FOR E-ITO NP:FOR 0 .. 1 TO 1 2:0(E.D)-O:P(E.0)-O:N£XT D,E 11lO RETURN
QU1l.LQUER 'FEe JOGADA. "; AS""" THEN 11
•
SINCRONISMO
IIIIIIIII
•
NIVEL DO JOGO
AS
• • •
o ATAASO DAS COBRAS MOVIMENTO DAS ILiNGUAS A COBRA ESTA SUBMEASA 7
As cobras ainda nao constituem amea9a: podem ser vistas dentro dos buracos, mas, estao sempre quietas. Agora vamos dar-Ihes movimento, complicando
urn paumo mals a vida do pobre Willie.
Lam, as passaros voam, As cobras, porem, permanecem totalmente irnoveis em seus buracos, Esta na bora de lhes dar urn pouco de vida.
20 REM ank Id a .• (57344) 30 REM c:p 2
410 IlEM jr nc , sko 50 REM ret
60 REM ako Id ix,573S0 70 REM ld hl,425
80 REM call Bkm
90 REM Id hl.l69
100 REM call skm 110 REM Id hl.2B2 120 REM call skm ])0 REM ret
A retina a seguir atica as cobras, fazendo-as sair de sua inatividade.
Nessa aventura esra hem rnovimentada: Willie anda e salta, as pedras ro-
10 ~EM oro 59923
111111
14.0 REM akm push hI
150 REM Id de, (57354)
160 ~EH abc hl,de
170 REM pop hI
180 REM Jr c,sns
190 REM r-et
200 8E.M sns 113 a, (ix+O)
210 REM inc a
220 REM res 4"a
230 REM Id (ix+O) ,a
240 REM inc il't
250 REM cp 7
260 REM jr nc,sco
270 REM ret
280 REM seo 1(1 bc,57224
290 REM Id d,43
300 REM cp 15
310 RSH jr n%,ste
320 REM Id bc,15616
330 REM Id d,4.5
340 REM ate Id a,d
350 REM call 56217
3150 REM ret A primei:ra tarefa da retina consiste em verificar 5e as cobras devem entrar em acio. Para isso, 0 valor do nlvel do [ogo, armazenado em 57344, e carregado no acumulador e comparado com 2. Bssa comparaeso e Ieita par meio de uma subtracao cujo resultado nao armazenamos, Se compararmos 2 com urn mimero menor, teremos urn resto. A baliza carry sent entao ajustada com 1 e o processador retornara, porque as cobras nao sao necessarias,
Se a baliza carry nao foi ajustada, a instrucao jr ne.sku pula a lnstrucao ret. Voce estara no terceiro ou quarto nlvel do jogo (valor 2 ou 3) e as cobras devern ser aticadas,
AS COBRAS AMEACAM I
A posicao de memoria 57350 carrega a primeiro dos atrasos das cobras, que indicarn quando elas devem mexer a lingua. IX e carregado com esse endereco e HL. com 425. a posiCao da primeira lingua de cobra. A retina skm, Que executa 0 movimento, e cbamada.
A posicao da lingua da pr6xima cobra e carregada em HL, e skID volta a ser chamada. Em seguida, a posicao da lingua da terceira cobra e carregada em HL e skm e chamada mais uma vez.
Quando todas as linguas esti verem se mexendo, a rotina retorna,
• I
SE A MARE SOBE... ,
Quando a retina skm e chamada, as posilyoes das lfnguas sao colocadas na piIha para. armazenamento temporario. A posicao do mar em 57354 e colocada no par DE. Neste ponto do programa, pre-
48 CODIGO DE MAQUINA 48
cisamos verifiear a altura da mare. Se a cobra estiver subrnersa, a parte da rotina que movimenta sua lingua pode ser pruada.
A seguir, a posicao do mar no par DE e subtralda da posi~ao da lingua em HL. Se nio houver resto, a posiCio do mar se encontra acima da posiCio da lingua da cobra na tela. Nesse case, a instrucao jr c,sos nao tern efeito e 0 processador retorna. Mas, se houver resto, ou seja, se a posicao do mar estiver abaixo da posh;ao da lingua na tela, a instrueao jr C,BOS faz com que 0 processador salte a instrucao ret e continue a rotina.
IMPREssAo
Chegamos, finalmente, a retina encarregada de imprimir au apagar a lingua da cobra na tela. 0 par de registros Be e carregado com 57224, os dados para a lingua da cobra. De ajustado com 43, a cor da figura, 0 atraso da cobra em A e comparado com 15.
Se 0 atraso nao tiver cbegado a IS, a instrucao jf nz leva 0 processador pa-
EST A NA HORA DE MEXER?
o atraso da cobra e carregado da posifi:ao apontada por IX para a acumuladar, onde e incrementado. 0 bit 4 e apagada para evitar que 0 atraso se torne maior que 15. 0 resultado dessa opera~lio e armazenado de volta na posicao indicada por LX. Esse apontador e entao incrementadc para indicar 0 atraso da cobra seguinte. Seu valor e comparado com 0 conteudo do acumulador pela instrueao cp 7. Se 0 atraso dessa cobra for maier ou igual a 7, [r nc.sno ruanda 0 processador para a rotina que imp rime a lingua. Se a valor for menor que 7. a baliza carry e ajustada com 1. a instrucao nao tern efeito e 0 processador retorna.
Cad a vez que essa retina e cbamada, urn atraso diferente da cobra e enCODtrado nos enderecos 57350, 57351 e 57352, pois 0 apontador IX e.Incrementado entre cada chamada que se faz a retina simi. A lingua da cobra fica para fora oito ciclos, e nao aparece nos oito ciclos seguintes,
011
ra ste. Se for igual a esse valor, voce precisara apagar a lingua, para que eIa nao apareca nos proximos oito ciclos. Be e carregado com 15616, 0 endereco dos dados de urn espaco vazio, eo registro D e carregado com 45. 0 c6digo da cor do ceu,
Qualquer que seja 0 valor do atraso da cobra (neste ponto da ro tina , ele e sempre maior do que sete), 0 processador encontra a instrucao Id a,d. Depois que ela carrega a cor apropriada ern A.
a retina print, em 58217, e chamada. Com isso, imprimimos a lingua - ou apagamos a que existia - para fora da boca de uma das cobras. A seguir, 0 processador retoma.
ii
20 SNK LOA 18238 30 CHPA '2
40 BRS SKO
50 aTS
60 BKO LDY ,18255 70 LDX 15095
80 JSR SKM
90 lOX 14591
100 JSR SKM
110 LDX ,38))
120 JSR SKM
130 RTS
140 SKM PSBS X
Esta retina movimenta as cobras, acrescentando aCao ao jogo.
10 ORG 20856
111111111
PROGRAM AS lONGOS: MElHOAE A VELOCIDADE DE MONTAGEIM
Como a leitor deve ter riotadc, apresentamcs 0 programs Avalanche em pequenes S8Q1mentos funciolnais. que podem ser te.stados separadarnente. Esse tecnica de constrU!;:ilo de programas, chamada de de~envQlvimento modular, e multo util para qualquer tipo de programa, pais agiliza 0 processo de mcntaaern e facilita encrmernente as testes de: execuc;;ao. Para a program~r;;iio cornplexa em linguagem de maquirra, 0 usa des-sa t~cnlca e essenclal, devido a diticuldade de S8 docum~nt.aif internamente - isto ~. na prdpna lista.gem do programs - 0 c6dig.o ern Assembler.
as profissionais que criam as soflstlcados videogames que vemos em tllp~ramas, par example, dominam perfeltame.nte a tacmes de modularizacao" Na reahdade, eles dlspdern de programas Assembler poderosfssimos, cepazes de representar uma biblioteea de retinas ~ ferrarnentas de programacao que f!icilitam multo aimplementa~ao dos racurses normalmente usados em
videogame:s. .
Infelizmente, as Assembler qua INPUT apresentou para 005 dlfererrtes micros sao muito lentos. Sa voc~ qulser ~e!horar a veloeldade de- montag em. dlvlda urn programa rnets longo em segmentes meneres e compile-os S8- paradarnente. Neo sa esqueca, porern, de caleular 0 enderee;:o de origem para cada segmento e incluf-Io em urn cornsnde o:rg au equlvalente, no corneeo de cada segmento.
150 LDX 1824.7 160 LEAX 31.X 170 CHP'X,:S'
ISO PUL,S X
190 BILl SNS: 200 RTS
210 SN.S: LOA • Y 22,0 IN'CA.
230 ANnA UF 24'0 STA.. Y+ 25110 CMPA 17 26'0 BIFIB seo 2710 RTS
280 seo LDU 118062 2900 eMFA. lIS
300 BKE STE
3110 lDU 11536
320' ST£ LEAX -2'56.X 330 JSB CRARPR
3401 RTS
3501 CBARPR EQU 19402
A primeira tarefa de rotina e veriffcat se. as cobras devem entrar em a~io. Para 1SS0, 0 valor do nfvel do jogo, armazenado em 18238, e carregado no acumulador e comparado com 2.
Se vo.ce esta no nfvel tres ou quatro - ou seja, se 0 valor 6 2 ou 3 ~ as cobras serio neeessarias. Nesse caso, a instruyio BDS faz 0 processador p'ular 01 RTS, seguindo a retina,
AS COBRAS AMEACAM
Y e carregado com 0 endereco do atraso da primeira cobra. Esta e a va-' riavel incumbida de lnterromper ou comeear 0 seu movimento. Os atrasos da segun.da.e da terceira c?hras estao logo em seguida na memoria.
X e carregado com 5095, a posicao na tela d? primeiro buraco, e 0 processador Val para a retina SKM.
Essa retina atiea a prlmeira cobra e incrementa a conteudo de Y antes de retamar. Assim, quando 0 processador salta para fazer CO.ID que a segunda e a terceir.85obras se movimentem, apenas as posicoes do segundo e do terceiro bu~acos precis am ser carregadas em X: y e incrementado automaticamente, apontan~o os atrasos das tres cobras. Quando tiver passado por todas elas, 0 processador retorna,
MARE ALTA
A primelra coisa que 0 processadcr faz ao entrar na retina SKM e colocar na pilha, para armazenamento temporario, III pas]cao da cobra na tela.
o registrador X e carregado com 0 conteudo de 18241, a posi~io do mar. Es,se valor e semado com 31, para que o apontador de tela se mova para 0 canto direito da tela, X e entao comparado com a p~sir;:ao do bm:aco da cobra, que esta na pllha de maqwna, atraves da instrucao CMPX ,So A posi~.io da cobra e recuperada da pilha, voltandc pan 0 registrador X.
Como is so nio afeta nenhuma das balizas, a instru~'io BHJ ainda se refere it operacao CMPX ~S. Assim, se a mar ~li:i acima do buraco - au seja, se a poBleilo ~~ mar na tela naa e maior do que a poucao do buraeo que estava na piIha -, 0 salto nao ocorre, eo process ador retorna,
Caso 0 mar nao tenha encoberto 0 buraco - isto e, se a posir;;ao do mar D.3 tela e maior do que a posiyao do buraco -, ,0 processador pula 3 instrucao US. e da continuidade a rotina que atiea as cobras.
-
MEXER ou NAO MEXER
A e carregado com 0 conteudo do atr~o da cobra que est' apontado no registrador Y. Esse valor e entio incrementado e a operai;ao AND e feita com $F. para ajusta-lo com 0 toda vez que ultrapassar 0 valor 15.
o resultado e armazenado de volta n~ endereco apontado por Y. Esse registrador e entao incrementado para apontar 0 atraso da proxima cobra.
o atraso da cobra que ainda esta em A e com para do com 7. Se for maier ou igual, 0 processador vai para a retina de lIDpressao da Hngl!a; case eontrario, 0 processador retorna.
o BOTE
Ao entrar nat retina seo, 0 processador carrega 0 apontador da pilha do usuarin com 18062, 0 endereco dos dados para at lingua da cobra.
A - que ainda conrem 0 atraso da cobra que foi incrementado - e comparade com 15. Se de nao foi inerementado at6 esse valor. 0 processador pula ~m.:a as instrueoes de impressao. Mas, se ]a chegou a 1.5, U e carregado com 1536,0 endereco da parte de Cell no canto superior esquerdo da tela.
Seguindo adiante, X e subtraido de 256, fazendo 0 apontador de tela se mover urn caractere para cima do buraco da cobra. Esta e at posi~ao da lingua.
Se a atraso da cobra estfver entre 7 e 14, a rotina CHARY.R imprhnira a lingua nessa posi~ao ao ser chamada. Mas, se 0 atraso river atingido 0 valor 15 a
lingua sera apagada, '
A lingua permanecera invisivel isto e, nao sera impressa, ate que 0 atraso chegue novamente a 7.
A retina apresenrada a. seguir atica as cobras que ateagora permaneciam quietas em. seus buracos.
10 ora 5.5564-
20 Id a. (-5228)
30 ep 2
40 jl'" ne.sk
50 r,e,t
60 uk Id be.-S198
70 Id hl.425
80 ca.ll re.Ja
90 Id ni • 369
10'0 c:a 11 Bin
llO ld h l , 282
120 call SID 130 ret
140 ,e,m pU!!Ih hI
150 Id de. (-5212)
rli
160 sbc hi,de 170 pop hI
180 .rr c , .!In
19IJ ret
ZOO sn Id a,(bc) 210 inc a
22IJ res 4.a
2'30 Id (be) ,a
241G inc bc
2,50 CIjI 7
260 jr !'Ie,Be 270 ret
280 Be Id de, (62407) 290 add hI,de
3,00 cp 15
no Id b,J6 3,20 jr ne, at
330 Id b.255
34.0 at Id a,b
)5,0 call 77
360 ret
370 end;
A primeira tarefa da retina consiste em verificar se as cobras devemenrrar em .a:.r;ao no nivel atual do jogo. Para isSO,. 0 valor do nfvel, - 5228, e carregado no aeurnulador e comparado eom z, Se voee esta DO terceiro ou.no quarto nivel - eu seja, se 0 valere 2 OU 3 - as cobras estso nos buracos e devemos a:ti!;:a-las .
A compara9ao e feita por meio de uma subtra¢o cujo resultado Ilio annazenamos. Se eompararmos 2 com urn numero menor, teremos um restoe a baliza carry passara a canter 1. Nesse caso, 0 processador retornara, porque as cobras Me sao neeessarias.
Caso a balizacarry naD tenha sido afetada, a instru~ao jr nt,sk pula a insuucao ret. porqueas cobras estao presentes neste myel.
AS COBRAS AMEA<IfAM
o endereco de mem6ria - 5198 contern 0 primeiro des chamados atrasos cbs oobras, que indieam quando elas devern mostrar sua lingua. 0 par BC e catregado com esse endereco, e HL, com 425, a posi~o da lingua da primeira cobra. A retina sm, encarregada de promover 0 mcvimento, e chamada.
A posiCio da lingua da proxima cobra e earregada em HL, e sm volta a ser ehamada, Em seguida, a posiCio da lingua cis tereeira cobra e carregada em HL, esmechamada rnais uma vex.
Depoie de movimentar todasas linguas, a retina retoma,
o .
MARE ALTA
Quando a retina SID e chamada, ape&i~o da lingua que esta, em HL e colo-
cada na pilhapara armazenamento temporario. A posicao do mar em -5212 e colocada no par DE. Neste ponte do programa, precis amos venfiear Sf: a. cobra seafogou com a subida cia mare .. Em caso afirmative, ela Ilia precisa mexer a lingua - assim, a parte da rotina que fax isso pede ser pulada,
Para essa verificacao, a posi~o do mar no par DE e subtrafda da posicao da lingua em HI.. Se naG houver Testa - OU seja, se a posicao do mar estiver acima da posir;;ao da lingua da cobra na tela -, a iD.5tru~ao jr e,sP :!lio tern efeito e 0 processador retornl:l. .. MRS,. se houver restc, a posicao do mar esta. abaixo da posio:;ao da lingua na tela. A instrucao jr C;SD faz,entio, 0 processador saltar a mstrucao ret ecominuar a retina.
ESTA NA HORA DE MEXER7
o atraso da cobra e carregado cia posl~o apontada per Be para 0 acurnulador, onde e increment ado , 0 bit 4 tambem e Incrementadc para evitar que o atraso se tome maier que 1 S •. 0 resultado dessa opera!;:ao e armazenado de volta :na posil;:ao apontada por BC.
o par de registros Be e incrementado para apontar 0 atraso da cobra seguinte, A instrucao cp 7 compara esse valor com 0 eonteudo do acumulador, e ainstrueao jr nc.se manda 0 processador para a retinaque imprimea lingua, se 0 atraso daeobra formaior ou iguala 7. Casoo valor sejainferior a 7. a baliza e ajustadacom 1, a instru'faa de desvio nio tern efeitoe 0 processador retcrna,
Ao sec chamada, essa retina sempre encontra urn atraso diferente nos ende recos ~5198. -5199 e -5220, ja que o apemador Be e .incrementado entre cadaacesso a sm. A lingua da cobra fica para fora oito clclos, nao aparecendo nos oito seguintes,
IMPRESSAO
Chegamos, finalmente, a. rotinaque imprime ou apagaa lingua da cobra lila. tela. 0 endereeo Inieial da Tabela de Nomesda VRAM e carregado em DE e somadoa HL, que eontem a posiCao da lfn.gua. Bsse par de registros passa entao a cooter 0 eaderecocorrespondente a posiCao da lingua na TN.
o atraso da cobra que ainda esta no acumulador e comparado corn 15 .. 0 registro B 6 carregado com 36, 0 ccdigo do padrao da lingua. Se 0 valor do atreso mao fer 15, a instrucac jr oz.s' Jeva o processador para st, pufando a instru!rao Id b,25S. Case cont:rmo,. a lingua deve ser apagada para que naoapareea nos proximos oita ciclos;o desvio Dio oeorre e 255,0 c6digo do padrio de cell,
e colocado em B. -
Neste ponto do programa, 0 valor do atraso da cobra sera sernpre superior a 7. 0 processador encontra a instruCao lda,b. que transfere 0 c6digo do padrao apropriado de B para IA.. A retina 77 da ROM,que coloca <0 codigo queesta em Ana pO!li~ao da TN apontada porHl., e cham ada .. Com isso, imprimimos a lingua - ou apagamos a que exlstia - para fora da boca de cobra. A seguir, 0 precessadcr retoma ao laco principal do jogo.
1IIII
OSISlEMA OPlEiA<C~ONAl
Sem 0 sistema operacional, seria
dificil trabalharcom 0 computador. Veja de que modo funciona esse importante components do seu micro e aprenda a fazer dele urn aUade.
Todos as computadores trabalham e entendem apenas uma linguagem: 0 codigo de maquina, que e representado internamente por pequenas variacoes binariasde vcleagem, Ele pode serexpresso por um conjunto de Ietras e mimeros, 0 que facilita sua compreensao, au par mimeros binaries, menos familiares ao usuario. De uma forma au de outra, essa Ilnguagem e considerada poueo
acesslvel par muitas pessoas, 0 que torna mais simples a comunicacao com a operador e 0 Sistema Operacional do computador (SO), urn conjunto de rotinas em codigo de maquina que controlam todas as funcoes da maquina. Seja qual for a linguagem ernpregada, BASIC au outra qualquer, essas retinas serao sempre utilizadas para controlar as divers as funcoes do computador.
Conhecer 0 funcionamento do SO nao e essencial para 0 usuario, porem amplia bastante suas altemativas de programacao. 0 uso de func;oes intemas do SO possibilita a obtencao de melhores resultados DaO so quanta a velocidade, mas, tambern, quanto a qualidade geral do programa.
Dentro dos limites impastos por cada maquina, este artigo procura mostrar
g
t
IIIIIIIIIIII
•
o QUE E 0 SISTEMA
ROTINAS GRAFICAS =.;---:C=O~M;;-:-U:-:-;NI=CA:-::::1;;AO COM a CASSETE
• PROCESSAMENTO DE TEXTOS
• COMUNICACAO COM
A IMPRESSORA
algumas aplicaedes uteis para as retinas e variaveis proprias de cada sistema operacional,
o aUE E SISTEMA OPERACIONAL
a so e apenas urn tipo sofistieado de program a - escrito em c6digo de rnaquina - que permite ao microproces-
OPERACIONAL
• •
o INTERPRETADOR BASIC ENTRADA E SAiDA
da execucao das mesmas tarefas, chamando as retinas apropriadas. Urn born exemplo e 0 comando INPUT, que usa uma serie de sub-rotinas do SO, tais como sele~io e leitura da porta de entrada, varredura do teclado, usa e transfereneia de buffer etc.
Outro exemplo interessante e CLEAR. Esse comando forca 0 SO a executar todas as retinas necessarias a liberacao da memoria RAM disponfvel para a usuario, destruindo todas as variaveis previamente existentes.
TRABAlHO SOB ENCOMENDA
Sempre que digitamos urn comando,
o SO seleeiona e coloca em aeao uma das retinas de seu vasto acervo. Suponhamos que voce tecle a letra A: 0 SO devera instruir 0 processador a imprimir o caractere na tela, cabendo-Ibe tambem detectar a tecIa que foi pressionada. A forma como ele faz isso varia de computador para computador. Em certas maquinas, 0 SO "varre" periodicamente 0 teclado para verificar se alguma tecIa foi pressionada, Em outras, seu funcionamento normal e .interrompido sempre que se pressiona uma tecla, a qual e identificada, em seguida, por meio de uma varredura.
Para responder adequadamente a pres sao da tecla, a SO adona a subrotina que manda 0 caractere correspondente a tela. Sua execueao, assim como a de outras rotinas em c6digo de maquina, e multo rapida, Se pressionarmos a tecJa <ENTER> ou a tecla <RETURN> , 0 SO ativara uma rotina que promove a mudanca de linha na tela (new line).
- -- --
o INTERPRETADOR BASIC
Quando executamos um programa codificado em uma linguagem como 0 BASIC, as instrucoes que estao na memoria sao. interpretadas, ou seja, traduzidas para os c6digos que 0 computador pode entender. Esses c6digos modificam os registradores de modo que as rotinas do SO possam ser chamadas adequadamente. Assim, as mesmas retinas que posslbilltam a execucao de comandos
•
VARIAVEIS DO SISTEMA
sador existente dentro da maquina responder aos comandos basicos de opera~o. Ele conrrola a comunicacso da maquina com 0 mundo exterior - a teclado, a tela, 0 alto-falante e outras portas de entrada e safda.
a so tern ainda a funcao de assegurar que a memoria seia utilizada de forma eficiente pelo usuario e pelo interpretador BASIC. Assim, quando ligamos 0 computador, ele ativa varias de suas rotinas da ROM para acertar os valores iniciais de variaveis e apontadores e, em seguida, avisa que esta pronto a aceitar comandos.
Em todos os microcomputadores abordados em INPUT. 0 SO e responsavel peJa interpretacao dos comandos em BASIC, contudo ele pode tambem lidar com outros tipos de linguagem,
Na maior parte do tempo, 0 trabalho do SO eonsiste em verificar e modifiear as valores de determinadas variaveis e apontadores especiais. E' imp ortante, pOT exemplo, que 0 SO conheca o endereco exato tanto do initio como do fim de urn programa em BASIC. Se o programa for modificado, seu tamanbo tambem mudara, e esses valores precisarao ser atualizados.
o mesmo se aplica ao proeesso de alocacao e manutencao de espaco para as variaveis, particuiarmente as variaveis indexadas, ou matrizes, Quando dlmensionamos uma variavel desse tipo, urn espaco deve ser reservado - e, quando a variavel nao for mais necessaria, ele deve ser elirninado.
E essencial que 0 SO utilize racionalmente a memoria, pols, caso contra-rio, urn programa longo au algumas variaveis mais compridas Iogcesgotarao a quanddade de espaco disponivel. ESBa adrninistracao da memoria e chamada de housekeeping - que poderiamos traduzir livremente po.r "cuidar da casa":
Uma boa "economia domestica" e indispensavel para que 0 computador fundone eficientemente.
o SO contem ainda uma serie de rotinas de software rnontadas de modo que tanto 0 usuario quanto 0 proprio SO possam utiliza-Ias com facilidade. A maioria delas nao e de interesse para 0 programador em BASIC, pois varios comandos dessa linguagem se encarregam
entrada'S pelo teclado permitem ao SO a execueao de urn programa BASIC.
Mas por que 0 BASIC e 'tao lento, ja que utiliza retinas em cedigo, que sao rapidas? Acontece que a linguagem deve ser interpretada ill partir de palavraschave - como PRINT - e de outros simbolos, antes que essas retinas internas possam serexecutadas, Como a tradu~a do BASIC e demorada, programas que exigem rapidez, como as de videogame, por exernplo, sao escritos diretamente em linguagem de maquina.
O tempo que se leva para eserever urn program a em c6digo de maquina e. em media, dez vezes .maior do que 01 gasto em urn programa BASIC. A velocidade de execucao do mesmo, ecntudo, chega a ser cinq iienla vezes maier. Assim, a mio ser que a rapidez de execucao seja multo lmportante, a maioria das pessoas prefere utilizar 0 BASIC, dada a facilidade de programacao,
-
ACESSO DlRETO AO SO
A possibilidade de ter acesso direto ao SO, scm passar pelo interpretador, seria a soJu~ao ideal para quem prefere as facilidades do BASIC, mas, par outro lado, nao quer abrir mao da velocidade. Nero todas as maquinas, pacem, oferecem essa alrernativa.
No TRS-80 e no TRS-Color, por exemplo, 0 SO faz parte do interpretador de dezesseis Kbytes - 0 Microsoft BASIC. No, MSX, alern de um conjunto de .rotinas basic-as, ehamado BIOS (BASIC Input/Output System), 0 SO incluj tarnbem 0 interpretador, Os micros da Iinha Sinclair, como e ZX-Bl e a Spectrum, sao ainda mais restritivos, uma vel. que nao permitem acesso aos registradores intemos diretarnente do BASIC (a que e essencial para que se possa selecionar as retinas existentes no SO).
Seja qual Ior 0 microcornputador e o tipo de acesso que oferece ao SO, sempre e possivel contornar diversos preblemas ~ inclusive a diminuicao do lama.nho das retinas em c6digo ~ por meio de alguns truques,
VARIAvEIS DO SISTEMA
as usuaries do Spectrum podem utilizar as retinas do SO at raves do comando USR, que tambem serve para executar rotinas em codigo de maquina colocadas remporariamente na RAM. Tente ussr, por exempJo. a comando direto RANDOM USH 0: ele pfovoca um. reset geralna maquina (reinidaliza~ao).
Para program as em BASIC, ha a alternativa de se modificar determinadas variaveis por rneio de comandos POKE.
POKE 230561, seguido de urn mimero entre 1 e 255, altera 0 Iapso de tempo que antecede a ativa~ao da autorepeticao das teclas, 0 valor normal e dado por urn POKE 23561,35. De modo amilogo, POKE 23562,5, que define o valor normal do periodo que decorre entre duas auto-repeticoes sucessivas, tambem pode ser modiflcado, Tal recurso e tiill em [egos, au qualquer OutTO tipo de programa que exija respostas reipidas do usuarto, via tec1ado.
As posicoes 23606 e 23607 contem 0 endereco dos padr6es de pontes dos caracteres. Se usarmos POKE 23606.8 (byte menos significativo), a apontador sera movido urn caractere para cima, na tabela, Assim, qualquer letra que digitarmos aparecera na tela como 0 caractere seguinte do c6digo ASCII. Tente dlgitar esse POKE seguido de I, 2, 3, 4. Note que este e urn metoda simples de "criptografar' Ilstagens em BASIC, desencorajando curiosos que tentem le-las, Se, em vez de byte menos significative voce recorrer ao mais significative - POKE 23607,0 -, 0 apontador sera dirigido para 0 comeco da memoria ROM, tornando os caracteres absolutamente inintellglveis.
A posi~ao de memoria 23658 posslbilita alterar a estado da tecla < CAPS LOCK> durante a exeeueao de urn programa, POKE 23658,0 muda as caracteres de rnaiusculos para minuscules:
POKE 236S8,8 admite so maiusculos.
o comando PLOT permite especificar uma posicao absoluta da tela, enquanta DRAW se refere de forma relativa a posi~ao corrente do cursor grafico .. Se voce precisar de urn DRAW absolute, podera eonsegui-lo atraves das posicdes de memoria 23677 e 23678. Para vertficar seu efeito, digite PLOT 128,85. Esse comando colocara urn pento no centro da tela, Suponhamos que voce queira tracar uma linha que va deste ponte ate 0 canto superior direito da tela, cuja posicao absoluta e (255,175). ORA W 255,175: indiearia urn ponte fora da tela, mas DRAW 25'S-PEEK 2367"1,17S-PEEK 23678 lhe data 0 resultado desejado. Ao subtrair PEEK 23677 da coordenada X e PEEK 23678 da coordenada Y, estamos, na verdade, efetuando uma opera~ao para obter as coordenadas relativas do comando DRAW.
Urn outre exemplo de utilizal;ao das TOmas do SO par meio de urn comando B.ASI C e dado pela simula~aa de urn relogio. No Spectrum, 0 cQnt8ldor de Iinhas de video ocupa as posi!;oes 23672,
23673 23674. Se colocarmos 0 nelas, usando 0 comando POKE, 0 conrador sera zerado. Depots disso, sua atualizar;:ao sera Ieita automatieamente atraves de inrerrupcoes. Aqui esta urn prograrna. simples que emprega 0 eontador para irnprovisar um relogio:
70 LET B~t-«h*60)~60)-(m*60} BO LET rs-> ['"+.STR$ h+": -.f.S'TR.$ m+-:'"+STB$ a+'"]'"
90 PRINT AT 1,15- {(LEN rs: /2)
100 GOTO 100
A linha 10 zera 0 contador de linhas de video, enquanto 81 linha 30 define a funcaD t, que 0 Ie. A linha 40 armazena o valor encontrado em t, A partir desse valor, as horas, minutes e segundos sao calculados.
ENTRADA E SAiDA
as rnicrocomputadores pertencentes a Iinha MSX possuem cerca de 32- Kbytes de mem6ria ROM dedicado ao SO. Os primeiros 16385 bytes sao preenchides com retinas de entrada e saida, o interpretador BASIC comeca em 16385 e termina em 32769. Bxistem ainda 3202 bytes dedicados as variaveis do sistema, todos eles situados no topo da memoria - 62333 a 65535.
Um SO com essa exteusao possui quase todas as retinas que 0 usuario pode desejar, Muitas dessas retinas temsido aproveitadas no videogame A valanche. Contudo, como a maforia delas emprega valores armazenados em registradores internos do Z-80 - 0 microprocessador do MSX -, poucas podem ser utilizadas diretamente por programas em BASIC. A solucao consiste em escrever pequenas retinas em codigo que modificam os valores dos registradores, de modo que 0 BASIC possa chamar a rotina desejada do SO. Urn exemplo desse procedimento foi dado no artigo pu blieado a pagina 1141 de INPUT.
De fato, e uma pena que 0 BASIC nao possa modificar as registradores diretamente, sobretude porque 0 SO do MSX dispoe de certos artificios projetados para facilitar a utiliza~ao de suas retinas pelo usuario. Algumas pm.;:oes
111111
da ROM e da RAM sao preenchidas com vetores queapontam para determinadas retinas do SO, numa tentative de simpllficar seu uso,
As retinas de entrada e saida - CO~ munica~ao com a tela, com ogerador de som, com 0 teclado e 0 casaete, entreoutros perifericos - estao espalhadas pelos primeiros 16K da ROM. Existe, paTern. uma pequena regiiio - que val do endereco .59 ao 348 - que contern vetores que apontam para as. principals retinas do BIOS. Assim, podemos tee acesso a essas rotinas de clURS maaeiras: ehamando seu endereco verdadei[0 na memoria ROM au usando seu vetor na tabela. As retinas do interpret adar BASIC tambem sao apontadas per vetores de uma tabela locallzada no topo da memoria - 64922 a 65535.
As retinas mais interessantes neces. sitam de parametros colocados nos registradores internes. Como muitas delas ja Coram apresentadas em outros artigos publicados em INPUT.~ faremos uma pequenajista de retinas (enderecos da tabela de veto res) e enderecos de variaveis titeis ..
As retinas podem ser usadas por meio dos comandos DEFUSR e USRO. e as variavels, por meio de PEEK e POKE.
GRAF'ICOS
Eis algumas retinas de interesse na utilizacao da tela:
65 - Desabilita a geracao de imagens na tela. Pede ser 6tH quando se pretende que a usuario nao aeompanhe a elaboraCio de urn desenho complicado, vendo-o so depois de complete.
68 - Reabilita a gera~io de imagens. Faz com que 0 processo de desenho, que a retina anterior oculta, apareca instantaneamentena tela.
98 ~ Muda as cores cia tela de acordo com 0 valor das variaveis do sistema.
108 - Bquivale a SCREEN O. Os enderecos das tabelas e as coees podem ser moddficadcsatrayeS des variaveis do sistema.
111 - SCREEN ), 114 - SCREEN 2. 117 - SCREEN 3,
192 - Bmite urn sinal sonoro .. 195 - CLS.
207. - Mostra as teelas de funcae na p.arte inferior da tela.
204 - Apageas teclas de funr;ao da tela.
Sao vadaveis de especial interesse pa-
ra a. tela: -
62387 a 62426 - Cada par de bytes corresponde ao endereeo de uma BASE. POI exemplo, 62407 e 62408 oont~rn 0 endereco de BASE(lO) , tabele de names da tela graflea,
62431 a 62438 - Conteudo dos registradores de VDP (Video Disploy Processor) ..
62441 - Cor de Jrente.
62442 - Cor de [undo.
62443· Cor da borda.
64695 e 64696 - Coordenada X. 64697 e 64628 - Coordenada Y.
TECLADO E CASSETE
Apresentamos a seguir algumas rotinas de comunicacao com 0 ted ado e 0 gravador cassete. A maioria dessas rotinas precis a de determinados parame-
tros nos registradores. -
159 - Aguarda que uma tecla seia pressionada pelo usuano e devolve seu c6digo ASCII ao reglstrador A. Essa retina, pode substitulr a llnha em BASIC que geralmente aparece d:epois Que a mensagem U AP..ER"TE QUALQUER TECLA"e impressa:
100 rr INKEYS"" .. TH.EN HlO
225 - LS 0 eabecalho de uma grava~a,o em fita cassete ..
228 - Le urn, byte da fita, 0 registrador A guardara 0 byte lido. 231 - Encerra a leitura da rita, 234 - Grava urn cabecalho na fita.
Se A. = O. 0 eabecalho sera. curto; se A= 1, sera Iongo. 237 - Grava urn byte nafita, 0 registrador A devera center 0 bytea. ser gravado,
240 • Bncerra a grav.al;lio,
Ml.I.itQS endereees e .rotinas ut~s des microcomputadores das linhas Apple e TK~2000 foram apresentados noartigo da ~agina 261. Nao voltaremos a tratar deles, nem de alguns truques ja mencionados, como, por exemplo, 0 usa de CALL -151 para ativar 0 monitor.
'0 SO do Applee do 'fK-2000 dividese em sistema monitor e rotine de inicializaciio iAutostart ROM). As retinas citadas aqui sao do monitor.
o SO do Applee do TK.-2000 - como 0 de todos as computadores que utilizam 0 microprocessador 6502 - tern
III
suas variaveis armazenadasuos primalros 256 bytes da ROM (Ptgina 0). Esses micros nao permitem a modificacao direta dos registradores do mlcroprocessador 6502 atraves do BASIC. Assim, as retinas que requerem parametros devem ser usadas com pequenas retinas em codigo para leltura e/ou medifkacao
desses registradores. .
o comando CALL serve para ehamar n~e sa, essas retinas mas, tambem, as que sao montadas em codigo, na RAM. Os enderecos podem ser modifteades com POKE e lidos com PEEK.
ROTINAS DO MONITOR
-528 - Imprime na tela 0 earactere cujo codigo esta noacumuladar (registradcr A).
-384 - INVlERSE.
·380 - NORMAL .
-198- Emite urn sinal so nom. No Apple rente tambem - [059.
-741 ~ Irnpnme urn cursor pjscante e aguarda que se pressione uma tecla, colocando e'ntao seu c6digo no aeumulader, Tambem embaralha 0 gerador de numeros aleatorios,
-864 - Provoca urn atraso de acordo com Q valor do acumuIador A. No Apple 1] a dnraeao .do atraso e de (26 + 27·A + 5* A· A)/2 mierossegundos. No TK-2000 a demora e maior.
-1948 - Determina qual sera. a cor do grafico de baixa resolucao de acordo com 0 contet'ido do acumulador.
-) 953 - Adiciona 0 valor 3 ao cedigo da cor atual para graficos de baixa resolucao.
-2048 ~ Desenha um ponto de baixa resolucao. 0 acumulador define a cocrdenada vertical, e o registro Y determina a eoordenada horizontal.
-2023 - Desenha uma liaha horizontal em. baixa resolucao ~ coordenada vertical em A. ecordenada horizontal inieial em Y e coordenada horizontal final no endereco $2C.
-2008 - Desenha uma linha vertical em. baixa reseIl1~ao - coordenada horiwntal em Y. coordenada vertical inicial em. A e cootdenada vertical final no endereeo $.2D .
• 1998 • Apaga a tela de baixa resolu- 99.0. No micro Apple. preencite a tela com caracteres @ invertidos, se for chamada no modo texto,
-1994 - Igual a anterior, 56 que respeita as quatro linhas de texto no rodape da tela.
-1935 - Verifica a cor de uma posi~o da lela de baixa resolucao, usando os mesmos reglstros que a retina do endereco -2048. A cor do ponto retornara no acumulador.
-182 - Grava rodos os registros do microprocessador 6502. Usa os endereeos $45 a $49. -193 - Recupera os registros. Usa os enderecos $45 a $49.
TELA DE ALTA RESOLUCAO
Os endereeos que controlam 0 tipo de tela no Apple [Dram muito usados nos programas de INPUT e nao seraa repetides. Existem, contudo, alguns outros enderecos i:nteressantes para gnlficos de alta resolucso.
2241225 - Coordenada X do Ultimo ponto plotado.
226 - Coordenada Y do ulrimo ponto plotado.
230 - Indica a pagina em que 0 ponto deve ser plotado. 0 valor 32 corresponde it pagina 1. e 64, a pagina 2. Note que a acesso a esse endereco pennite que se desenhe na pagina 2, enquanto se mostra a pagina 1 e vice-versa.
228 - Indica a cor do grafico. Seus valores estao na tabela apresentada a seguir.
HCOLOR a
1
2
3
4
5
e
7
COR preto 1 verde violeta branco 1 preto 2 vermelha azul branco 2
BYTE 228 o 42
85 127 128 170 213 255
62450· Limpa a tela (alta resolncao), 62454 - Preenche a tela de alta. resoIUI;a.o com 0 byte 228. Alem de permitlr a seieQao de cores de fuodo para seus desenhos, essa retina produz diversos padroes quando 0 byte 228 assume valores que nao correspondem as cores da tabela anterior.
As retinas do SO sao acessadas pelo coman do EXEC, que tambem chama
rotinas em c6digo montadas na RAM. Muitas variaveis sao obtidas com PEEK.
tinas principals, a saber: BLKIN - no endereco 42763 -, que faz a leitura de urn bloeo de 255 bytes na fita; e BUOUT - endereco 42996 -, que grava um bloco na fita.
Tambem sao de utilidade para a programador BASIC os enderecos da pagina I, que listamos a seguir:
COMUNICACAo COM 0 CASSETE
Todas as rotinas destinadas ao usa em gravadar cassete empregam duas ro-
II
1'111111
121 - Fornece 0 status da porta de entrada e saida do gravador cassete, Pede assumir os valores 0 (porta fechada), I (aberLa para entrada) e 2 (aberta para saida). Para evitar que erros de saida destruam seu programa, verifique a porta. utili-
zando 0 comando PEEK antes de abrir urn arquivo,
144 - Empregado pelo sistema operacional para definir o comprimento docabecalho. Se voce tern problemas com 0 volume do gravador, colaque urn valor mais alto nesta pos.ic;ao pormeio do comando POKE.
149/150 - Bstas posicoes con tern 0 lapse de tempo que se segue a urn comando MOTOR ON. POKE 149,O:POKE 150,1 resultara em lapse zero, util ao se usar AUDIO ON/OFF comcontrole do motor.
PROCESSAMENTO DE TEXTOS
Outra secao do sistema operacional que podeser de interesse para 0 programador BASIC e aquela que executa os testes de entradae saida. Eta inclui entrada do teclado e salda para a. tela e a impressora.
Frequentemente, a mensagem "aperte qualquer tecla" surge na tela junto com urn laco do tipo:
100 IF INKE!S=~ R THEN 100
Essa linha pode ser substiruida por outra bem mais curta: EXEC 44539. Se voce quiser nUl cursor piscante use EXEC 36038.
Convem anotar aindaos segnintes enderecos dessa secao:
135 - Contern 0 c6digo ASCII da Ultima tecta pressionada ..
338e 345 - Colo cando 0 valor 255 nessasposieoes, antes do INKEYS, obtem-se a auto-repeHCao das teclas.
282 - E a trava de letras manisculas.
Voce pode forear as minusculas colocando urn 0 ali. 0 valor 255 forca as maiusculas e qualquer outre valor desabilira 0 uso de <SHIFT>O.
43304 - Contem a retina quelimpa a tela,
COMUNICACAO COM A IMPRESSORA
Entre as variaveis relacionadas ill impressora, sao de maior utilidade para 0 programador aquelasque se encontram nos seguintes enderecos:
153 - Determina a distancia entre itens separados por vfrgulas, o normal e 16 ..
155 - Para que a fun9ao POS( -2) tenha um desempenho satisfatorio, esse endereco deve con-
ter a Jargura do papel utilizado (40, 80 au 132).
330 - Contem 0 mimero de caracteres enviados pelo computador paraassinalar urn [inal de linha (EOL). Nermalmente, apenas um caraetere e enviado,
331 a 334 - Contem as caracteres do EOL: CR (13), LF (10), 0, 0, Esses caracteres podem ser alterados para correspoudera urn certo tipo de irnpressora.
328 - Contem 0 indicador de alimentaeao automarica de linha, Se seu valor for 0, 0 computador faz 0 papel avancar automaticamente com 0 retorno do carro. Qualquer outre valor Jeva a impressao dos earacteres do EOL apos a do mimero de caracteres indicades par 155.
GRAFICOS
o programador BASIC nao tern aeesso as retinas do SO que dizem respeito aos graficos, Mas existem alguns enderecos que, junto com as comandos PEEK e POKE, podem ser titeis.
182 - PMODE: mimero do modo gnifico. J 83/184 - Endereco final da tela, 186/187 - Bndereco inieial da tela,
188 - lnicio da pagina 1,
200 - Coordenada X do cursor grafieo. 202 • Coordenada Y do cursor grafico.
OUTRAS ROTINAS INTERESSANTES
EXEC 43486 - Atualiza todos os joysticks; soluciona as problemas que possam ocorrer com 0 comando JOYSTK.
EXEC 40999 - Equiva1e ao botao RESEI:
EXEC 41142 - Reinicializacao total: equivale a desligar e Iigar a rnaquina novarnente.
EXEC 46481- Executa uma "coleta de lixo' eontrolada nas variaveisalfanumericas, evitando as desagradaveis pausas que ocorrem inesperadamente nos programas que as incluern, A quantidade de espaco string remanescente pede sec calculadacom
PEEK(35)*256+PEEK{36)-PEEK(33la 256-P££)( (]4)
a valor normal para. 0 espaeo string e 200. A nae observancia desse limite pode causar enos do tipo OS (out a/string, que quer dizerr fim do espaeo para string),
COMOIL~DAR COM ARQU~VOS
Abra urn clnsl de comuniC8ltaO com 0 drive DU 0 casseta e mands seus valiosos dados para 0 arquivo. Saber manipular ossa 'farramenta , fundamental para certas aplica~oes.
Qualquer programs que manipule grande quantidade de informacao deve armazena-Ia da maneira apropriada, No artigo publicado it pagina ] 28. tratamos do armazensmento de uma pequena lista de telefenes em Iinhas DATA. 0 programa ali apresentado permite ao usuario proeurar e imprimir qualquer irtem da lista, Porem, pan. qualquer modlficacao na lista, e necessario interremper a execueao do programa e editar as linhas nATA. AJem disso, as dados 86 podem ser gravados junto com 0 programa que os manipula,
Essa dependencia dos dados ao programa muitas vezes e mdesejavel, Para evita-la, convem guardar os dados em flta eassete on disco flexfvel, A reeupera~o das informacoes ! tio rapida quanta 00 case das linhas DATA, mas a aJtera§;io e a edicio de dados tornamse extremamente mais faceis, Para efetua-las, 0 usuario 113:0 precisa saber nada a respeito do programa,
Como em muitos program as apneativos listados em INPUT. os dados sao armazenades em arquivos, na rita au disquete, 0 banco de dados, 0 orcamento domestico, a agende etetrcnica e It planilha sao exemplos de programas que' envolvem grande quantidade de informa~5es. Se cbservarmos suas Iistagens com atenCio, poderemos Identifiear as Iinhas que tratam da gravac-io e leitura dos dados. Bias ocupam urns po[~aQ. minima do programa, se comparadas as demais SCI;Qe&, encarregadas, entre outeas colsas .• de reservar espaco na memoria, estabelecer a comunicacao com 0 usuario e manipular as clades.
Quando armazenamcs os dados ,ill parte, as possibilidades de ntilizacao do programa aumentam bastante, estendendo-se it clI'ia!;io e aiteracao de varies arquivos diferentes, com quantidades dlversas de registros e campos.
Empregamosem nossc programa 0 metoda de armazenagem sequenciar, cujo principio e multo simples. Como VO~ ce vent, ele permite que as dados seiam convertidos a DIn formate que se adapta a diversos prcgramas .• e ate mesmo a computadores diferentes.
o arquivo sequencia! caractenza-se pela a:rma:zenagem dos dados em serie, dispostos um apes 0 outre e separados
apenas por um byte. Toda a inform acao deve estar na memoria antes de ser transferida ao arquivo.
o primeirc passe para a criaeao de um arquivo sequencial consiste na abertura de urn canal de comunicacao com o dispositive que va] armazenar OS dados - eassete au drive, Isso e feito por intermedin do comando OPEN. numa sintaxe que varia conforme 0 tipo do mlcrocomputador. Para conhecer os comandos mais utilizados, volte ao artigo da pagina 68.8.
Aqui, explicamos em detalhe as teenicas envelvidas na cria~io de arquivos, de modo que voce podera Incorpora-las faeilmenre a seus programas.
CRIIANDO UM ARQUIVO
o programa a seguir mostra como criar uma versao mais scfisticada da lista de telefones meneionadaanteriormente. Ao utiliza-la, voce podera modificar, sem maiores dificuldades, as mensagens dos comandos INPUT e 0 foemato das matrizes, para Que aceitem outre tipo de infermacan.
Os clad os sao fcmecidos nesta ordem: nome, sobrenome e mlmero do telefone. Como numeros de telefone podem center espacos, Wrens e parenteses, convern dar-lhes a forma de cadeia de earacteres, Se voce quiseralterar 0 programa para lidar com outros tlpos de informacao, podera usar tambern matriz.os numericas: e alfanumericas, Um arquivo recebe dados em qualquer formato e em qualquer ordem. 0 importante e que a leiiura se faca nessa mesma ordem e que os dados sejam colocados no tlpo adequado de variavel,
Embora seja passive! armazenar ina formacces dlretamente no arquivo, e mais conveniente que coloquemos os dados em uma matnz e depois guardemos toda a matriz 00 arquivo ..
A primeira parte do programa rem UlD pequeno laco que possibilita a entrada dos dados, Digite quantos nomes e numerus quiser·- 0 limite e a dimensao da matriz, especificada na linha 10. Modifiquea dimensso, caso precise de um numero de itens superior a cinquen,tao Quando tiver entrada todos os da-
dos, digite ENTER au RETURN e 0 la<;0 de entrada seni interrompido.
A segunda parte do programa - da linha 100 em diante _ grava os dados no arquivo, Daremos explica!;oes referentes II! seu funcionamento nas varias versoes do programa,
5i
10 DI'lot AS (50" l5): DIM Be (50. 15): DIM TS~50~12)~ DIH Nel) 20 LET N-O
30 LET N"N+l
(0 INPUT ·PRIHEIRO NOME ,. ~A$ ( N)
50 INPUT "SEGUNDO NOME ·:BS(N )
60 INPUT "NUMERO DO TIElI.EfONE .. ;TS (N)
70 IF AS (N) 0"
.. AND N<50 THEN GOTO 30
60 Cl.S : Pllll:NT ·,SALIJANDO DADO S AGORA"
100 S.AV.E "CaNT'" DATA N ()
l.lO SAVE "P. NOKES'" DAT~ AS 0 120 SAVE "S.NOMES·' DATA B$O 130 SAVE '"N.TiLEr." DATA TSC) 140 PRINT '"DADOS GijAVADQS· 150 STOP
Para. a gravar;io. a Spectrum utiliza o comando SA VE seguide do nome do arquivo. Note que cada matriz e gravada -COPlO urn arquivo distintc, reeebendo urn nome especial. A Instrucao DA· TA seguida do nome da matriz deve vir depois do nome do arquivo,
Os dados entrados na primeira parte do programa. sao colocados em tres va-
1111111
• VANIAGENS DA UTIUZACAO E FECHAR AIRQUIVOS
DE ARQUIVOS • GRAVA~AO E
• ARQU!VOSEM FITAS RECUPERACAO DED.A50S
E O;ISQUETES -=.~~~~~F'IM D;e AHQU1VO
~~~~~~~~~
• COMO ABRIR ,.=.=------ __ ----=-O__;;,.U.::....:SO:.....:::ID:....:;_OS.::....,;D::..;_A.:.::._DO=S
Como gravsr dados em fita cassete no Apple e no TK-2000?
P'ara contornar as problemas de arquivarnentc no Apple enn TK-2000, a melhor solugao e cernprar urn drive: de discos flexlveis. Mas existem algumas alternativas - nenhuma rnilsgrosa. podemos a.diantar.
Ess'es micros 56 permitem a grav8- CaD de urns variavel indexada unidimensional e nao montam na fita um arqulvo nroprlamente dito. a leitor pode achar que tsso ja e suflciente para algumas aplicac;:oes. Parem, a IIel1tidao e o g,rande espaco que urna pequena VBrjavel ocupa na fita certamente logo vae desencorajar os rnais afoltos.
Em nossa opiniao. B safda mais conveniente para quem nao pede adquirh um drive e cclccar as dados em urn buffer no alto da mernorla, usando 0 comando POKE. Em seguida, basta entrar no monitor de linguagem de maquina - com CALL -151 - e gravar 0 buffer por jntermedio do comando W do monitor.
riaveis indexadas: AS( ), B$( ) e TS( ). Na linha 100, abrimos urn arquivo para a grava~o de dados em fita cassete por intermedic da insctru~ao OPEN "CAS:
Dome do :arquivo" FOR OUTPUT AS # Dumero do arqnivo.
A instrucao PRINT # 1 signiflca "imprima 0 pr6ximo item no arquivc", Assnn, a Iinha ltD grava 0 valor de N - total de mimeros e names da Iista -, para que seja usado posteriormente na Ieitura do arqulvo.
O taco entre as Iinhas 120 e 140 utiliza a mesma instrueao PRINT # 1 para guardar 0 conteudo das tres vari.aveis Indexadas. A instrucao CLOSE # 1, per sua vez, fecha 0 arquivo,
[jJ
10 D1M AS(SO).SS(50),T$(50) 20 OS· eRAS (4)
30 N- N + 1
4Q INPUT ·PRIMEIRO NOME ~;A$(N ) Sill 60 7 III
INPUT ·SEGUNDO NOME ·,BSCN) INPUT "TELEFONE .. ;TS eN)'
IF AS(N) < > •• AND N < 50
THEN 30 80 HOME ADOS" 1'00' PRINT DS i '·OPEN AIIQUIVO" 110 PRINT D~i"WRITE ARQUIVO· l20 PRINT N
160 PRINT"DADOS GRAVADOSPRINT "GRAVANDO as D 170 END
A primeira sel;aa do programa, que trata da entrada dos dados, ~ comum aos dais tipos de dispositive, ao contrario da segunda secao, incumbida de gravar os dados.
Na versao para fita cassete, um are quivo e aberto pela instrucao OPEN "'0" que estabelece uma linha de comunicacao com 0 dispositive de armazenamenta para a saida de dados, Bla e seguida por urn # -I, que diz ao cornputador que se trata de gravador cassete, e pelo nome do arquivo entre aspas.
o cornando PRINT # -1 signifies "imprima 0 proximo valor no arquivo". Assim, a linha 110 grava 0 valor de N - 0 numero de telefones da lista. Para o processo de leirura que descrevemos a seguir, e importante que esse valor encabece' 0 arquivo.
A linha 130 esereve cada urn dos irens no arquivo - observe que eles sao separades por meio de vfrgulas. Finalmente, 0 comando CLOSE # -1 fecha 0 arquivo (linba 150).
A criacao de arquivos em discos flexfveis e multo semelhante, empregando os mesmos comandos. A unica diferenca e 0 mimero utilizado ap6s 0 sinal #. OPEN "0", #; 1, seguida do nome do arquivo entre aspas, abre urn arquivo; PRINT #1 guarda urn itemnele e CLOSE # 1 trata de fecha-le.
Como voce pede nctar, na linha 130 os itens estao separados par ponte e virgula, Embora se permita 0 usa de virgulas, aquele e 0 modo mais economico de armazenar dados no disco.
as disquetes admitem a criacao de rnais de urn arquivo ao mesmo tempo, pais, ao contrario do gravador cassete, o drive e capaz de procurar a poreao adequada para ali gravar os dados. Assim, po demos numerar os arquivos com #1, #2. #3 e assim por diante, enquanto 0 cassete e sempre numerado com # -1 - urn PRINT # - 2 ruandara 0 dado para a irnpressora.
A LEITURA DO ARQUIVO
o programa que recupera as infermacoes gravadas no arquivo e exatamente 0 inverse do programa anterior. Ble imprime os dados lidos na tela para que possamos conferi-los.
200 CLEAR
210 DIM N(l): LOAD "CONT" DATA NO
Trataremos apenas da gravacflo em disquete, pais a armazenagem de arquivas em fita no Apple e no TK-2000 e rnuito precaria. Como voce deve se lembIM. para controlar 0 drive sem sair do BASIC Applesoft utillzamos 0 caractere de controle CHRS(4), que foi colocado na variavel DS (linha 5).
A primeira parte do programa, que cuida da entrada dos dados, coloca-os em tees varlavels indexadas: A$(), BS( ) e T$( ). Urn arquivo e aberto na linha 100 atraves do caractere de CO)]rrole, seguido do comando OPEN e do nome do arquivo (entre aspas),
o comando WRITE, na linha 110, permite a gravar;:ao de dados no. arquivo que foi aberto. Todos os comandos PRINT que aparecem em seguida escrevern no arquivo e mao na tela. 0 comando CLOSE fecha 0 arquivo e devolve a funcao original 810 PRINT.
10 DIM A8(50) ,8$(50) ,TS(5D) 30 N"N+l
4.0 INPUT" PRIM.EIRO NOHE "i AS eN' so INPUT-SEGUNDO NOME ·;S$(N) 60 I.NPUT"'NUMEltO DO TELEFONE .. iT SeN)
70 IF A9 (N) <) .... AND N(SO THEN 3 o
80 CLS: PRINT"S'ALVANDO DADOS AGO RA"
Use esta secao para arquivos em rita cassete:
100 OPEN "O",I-l,"AlI.QUIVO· 110 PRINT l-l,N
120 FOR l~l TO N
130 PRINT ,-1,A$,(L) ,89(£.) ,T8{L) 140 NEXT
150 CLOSE I-I
160 PRINT~DADOS ORAVADOS· 170 END
Utilize esta secaq para arquivos em disquete:
100 OPEN ·O·,tl,"ARQUIVO" 110 PRINT U. N
120 FOR L-l TO N
130 PRINT Il,A$(L),B$(L) ,TSCL) '140 NEXT
150 CLOSE 11
"111111111111111-
A linha 210 Ie a quantidade de nomes arm azenad a no arquivo - N - e utiliza esse valor para dimensicnar as variaveis. N tambem controls o laeo de leitura do arquivo, p.ara que ele seja reeuperado ate 0 final. Note Que bs valores lidos sao colccados nas variaveis na ordem em que foram gravados, separados pelo mesmo tjpo de sinal - nocaso da fita, a vfrgula; no do disco, ponto e virgula, 0 arquivo deve ser fechado apes ser lido.
215 DIM A$UHl) ,.15): DIM B~I{N( 1) ,IS): DIM T:!I (Ntl) ,12)
220 LOAD "P. NOMES· DATA AS () 230 LOAD "S.HOMKS" DATA B$ () 240 LO.1o.O ·hI. TIEL,EF ." 'DATA T$ ( ) 2S0 FOR [.-1 TO N(l)
260 POINT A$(L),88(L) ,TS(L) 270 NEXT L
Para utilizar esse prograrna, rebobine a fitaate a eomeco do arquivo gravado pelo primeiro programa. Digite RUN 200 para recuperar as dados; naQ rode 0 programa Inteirn novarnen te .
A Iinha 200 apaga os antigos valores das variavels, paraque 86 08, obtidos no arqnivo sejam Impresses. A linha 21 0 dimensiona uma nova varlavel N( ) com urn elemento. Ela sera usada para recuperar 0 valor de'N gravado anteriormenteo As outras variaveis sao dimensionadas de acordo com 0 valor de N( ). Conheeendo 0 numero exato de elementos do arquivo, nio rentaremos Ier alem do seu final ..
o Testa doprograma e facil. de entender: simplesmente substitufmos os SA~ VE do primeiro prcgrama par LOAD. E precise fechar urn arquivo aberto para gravacao, mas nao para leitura,
200 CLEAR 2'0'OO:OPEN"CAS:ARQUlQO .. FOR INPUT .AS U
Para usar esse programa, rebobtne a Iita ate 0 comeco do arquivo gravado pelo primeiro programa. Digite RUN 100 para Ier 0 arquivo; nao [ode a prograrna iateiro novamente.
A Iinha 200 apaga as variaveis nrigjuais; dessa maneira, 0 progr.a.ma imprime s6 aquila Qjue obtiver DO arquivo, Este ,e aberto para Ieitura pela instru~ao OPEN ~'CAS:" FOR OUTPUT AS, seguida do valor adequado,
A linha 210 le a quanti dade de names armazenada no arquivo - N - e utiliza 'esse valor para dimensionar as variaveis, N rambem controla 0 laco de lei. tun do arquivo, para que ele seia recuperado ale a final. Note que as valores lidos sao colocados nas variaveis na Ofdem. em que' foram gravados, separados pelo mesmo tipo de sinal - no caso da fita, a virgula, 0 arquivo deve ser fechado apes ser lido, -
200 DS '" CHiRS (4.): PRINT DS: "0
P"EN .MlQU1VO"
210 PRINT DS; "READ ARQUIVO" 220 INPUT N: DIM AS (N) ,BS CN) • T $ eN) 230 2010 2S0 260 27Q 280
FOR. L .. 1 TO INPUT M(L}:
INPUT B$(L):
INPUT TS(l.):
N.£XT L PRINT DS,·CLOSE ARQUIVO·
N
PRINT A$(L) PRINT BS (Ll PRINT Ta(L)
A linha 200 ~ encarregada de apagar os antigos valores das variavei.s; dessa maneira, 0 programa imprime somente os valores que obtiver 00 arquivo. Este e aberto para leitura pela instrucao OPEN seguida de READ.
A linha 210 IS a quantidade de nomes armazenada no arquivo- N - e utiliza esse valor para dimensionar as variaveis, N rambem tern como funcao CODtrolar oIaco de Ieitura do arquivo, para que ele seja recuperada ate 0 final. Note que os valores lidos sao eolocados nas variaveis na mesma ordem em que foram gravadcs, separados pelo mesrno tipo de sinal- no caso da flta, a virguIa, 0 arquivo deve SeT fechado a_pos ser Iido,
Para fita cassete, useesta se(:3.o: 200 CLEAR 2QOO:OP£N"I~,.-I."AII.Q UJ"IVO"
No casu de discos flexfveis, recorra a esta outra:
200 C['.EAR 2001): OPEN ·0". n ... MlQ UIVO"
210 INWUTtl.N:DIM AS(N) ,88(H}.T SeN)
220 FOR t-l TO N
230 INPUT tl,AS(L).SS(L),TS(L) 235 PRINT' AS (L) ; BS eL) ; TS· (L) 240 NEXT L
250 CLOSE f:l
Para executar esse parte do prograrna" rebobine a fita ale 0 infcio do- arquive. Digite 0 comando RUN 200 para recuperar as dados; nio rode 0 program,a inteiro novamente.
A linha 200 apaga as antigos valores dasvariaveis; dessa maneira, 0 prograrna imprlme apenas os valores que obtiver no arquivo, Bste e aberto pan leilura pela insnucao OPENU)!" seguida do valor adequado - # -1 para fita e # 1 para disquete,
FIM DE ARQUIVO
o ultimo programs usou a variavel N para controlara leirura do arquivo. Contudo, nem sempree possfvel saber de antemao quantos items devem sec Iidos, Urn modo de contornar 0 problema e usar urn rnarcador para smalizar o fim do arquivo. 0 l'R.S-Color e 0 MSX colocam automatieamente urn sinal desse tipo - EOI' - no final, sem· pre que uma mstrueao CLOSE e encontrada ..
Asslm os usuaries dos microcomputadores TRS~Color e MSX podem rnadificar 0 programa anterior para que ele lela a arquivo desde 0 initio, parando sempre queencontrar 0 sinai que indica fun de arquivo - EOF ..
Listamos a prograrna a partir da Iinha 100 para que voce possacom:para· 10 a versao ja dada e escclher 0 metodo que considerar melber.
Medifiqueas linhas conforme a Iistagern a.baixo e, depols, tente gravar e Ier 0 arquivo novamente,
235 PRINT AS(N'iBS(N)jTS(H) 240 IF EOF(ll-D THEN 210 250 CLOSE U
A linha 240 de ambos os programas verifica a ocorrencia de urn sinal de fim de arquivo - EOF.
OUTROS SINAUlADORES
Para indicar 0 final do arquivo, os usuaries dos microcomputadores da Iinba Apple podem colocar ali u:m einalizador arbitrario. Ja no caso do Spectrum, detectamos 0 fim do arquivo de outra rnaneira: ap6s entrar todos os dados no Iaeo inicial, digitamesuma senha arbitraria. Bsta pode ser ZZZ, - 999, a palavra FlM au qualquer outra coisa que nor.malmente nao se inclui entre os dados de om arquivo,
Altere as proximas linhas e veja como utilizar um sinalizador desse tipo. A!o digitar os dados do arquivo, entre a palavra FDf apes 0 ultimo mimero de telefone e ENTER. OU RETURN ap6s a'S ourras duas sclicitacees.
210 PRINT D$;"Iil:EAD .\RQUIVO" 220 DIM A$(SO).B$(50}.'FS(50) 2.25 L - 1(1
230 L = L + 1
24() INPUT AS (Ll: PRINT AS (L),
250 INPUT BSCt): PRINT BSCL) 260 INPUT TS(L): P~INT T$(l) 270 IF AS(L) ( > "FIM" AND L < 50 THEN GOTO 230
280 PRINT DS:"CLOSE ARgUIVO"
70 IF AS (N) <>"FIM" AND N<50 T'RE N ]0
14.0 I.F A$ (N)<>-FIM" AND N<SO TN EN l20
240 IF A$(N)<>-FIH· AND N<SO TH EN 2]0
o usa DOS DADOS
Armazenados em um arquivo, ou se[a, fora de um programa BASIC, os dadospodem ser utilizados por vanos programas diferentes, Qualquer uma das retinas de ordenaeao apresentadas DOS amgos das p4ginas 468 e 738. por exemplo, servem para ordenar alfabeticamente nossa Iista teIefOnica, VITIa vez feito Isso, podemos locallizar rapidamente detenninado item da Iista, pOI meio de uma busca binaria, como mostra 0 artigo da pagina 930,
28 APLlCA~(}ES 28
• A IMAGEM ESTA CENTRADA?
• DISTORC.OES JUNTOAS BORDAS
• DEFINICAODA IMAG:EM
• RAzAO DE ASPECTO
• OEFINI~AO DAS CORES
Sa voce' sentfr a vista cansada ,apasl fixar por algum tempo 0 video do micro, talvez seja a hera de providenciar
lim Dutro monitor. Use este programa para tester a qualidade da imagem.
At~ poueo tempo arras, a preco de urn monitor de video colocavaesse periferico totalmente fora do alcance da maioria dos proprietaries de micros, cbrigando-os a utilizar aparelhos comuns de TV como saida de video.
as tefevisores apresentam varies inconvenientes: a imagem pisca e oseila continuamente de modo imperceptfvel, o que prcvocadores de cabeca e cansa~o visual apos urn certe tempo. Outre problema e causado pela baixa resolu!;ao da tela. que resulra em perda de detalhes e definicao da imagem em. textos e graficos.
Entretanto, 0 eusto relative dos rnonitores profissionais de video tern caldo bastante nos Ultimos anus, tornando esse periferico cada vez .. mais aeesslvel. E. se voc~ ainda naa tern urn, vale a pena ir pensando em adquiri-Io, pais a qualidade da imagem e bern superior ill de um televisor.
No artigo da pagina 851, descrevemos as caracterfsticas tecnicas que difereneiam urn televisor de UID monitor e falamos dos aspectos, que devem ser considerados na escolha de um born monitor, Naa h8 duvida, porem, de que 0 melhor criterio para essa sele~ao ainda e 0 • 'Teste de Sio Tome" - au seja, ver como fica III imagem no video, quando 0 eonectames ao nosso computador. Como M problemas de compatibtlidade entre monitores e micros. e fundamental que voce use 0 seu modelo na hora desse teste ..
o programa Iistado neste artigo foi projetado para testar as earactertstlcas do video em diferentes linhas de computadores. A versao para 0 Spectrum mostra om unico padrao visual na tela; j a as versoes paraoj MSX,. Apple, TK-2000 e TRS~Color mostram duas ou tres te· las suc.essiv,as, cada qua] projetada para testae um aspecto do funcionamento do video.
Os pad roes visuais variam de computador para computador ,. mas contem basieamente oselementos utilizades em testes ccrno os Que SaQ transmitidos em horas mortas pelas emissoras de TV: circulm. e linhas espacadas a curta distancia, para testar 0 poder de definicao de tela; padroes colocados nos cantos da tela, para testar distorcoes marginais da imagem, e barras ou faixas de Ladas as cores disponiveis.
Ao radar 0 programa de teste. observe prime:iro se a imagem esta bern eentrada, Em alguns computadores, 0 geradar de video nao deixa margem na tela, e, se ela estiver mal aiustada, haveni uma perda de grlliicos e textos juntoa borda. Muitos monitorese televisores dispoem de botees giraterios de aj uste de eentrallzacao e expansao de imagem. Iecalizadcs atras do aparelho. iVoce podera usa-los para conseguir um.resultado melhor.
Verifique em seguida se as Iinhas dos retangules junto as bordas cia imagem
- _ f· . .. d ..1.:_. - .. ( r
nao 510 rem uma gra:o_e enstorcao as J.
nhas retas se transformam em areas tonvex os: quanta menor 0 raio destes, maier a probabilidade de que 0 monitor seia de baixa qualidade).
Todas as linhas aparecem nitidamente separadas umas das outras? Se isso na~ ocorrer, be. problemas de definicao na imagem, 0 que podera prejudicar a Iegibilidade de textos, Em muitos mo:nitores e televisores, a reso~U(;:ao e melher no sentido horizontal do que no vertical. ou vice-versa, devido a maneira como' os pontes coloridos de fosforo sao dispostos na tela. Monitores de boa qualidade tern resolucao igualem todas as direcoes.
Os ctrculos que 10 programs desenha nao sao perfeitos, tendendo a assumir uma forma ovalada? Este e urn born teste para uma das caraeteristicas dos videos de boa qualidade, a eharnada faZOO de aspect»: para obte-la. dividimos o diimetro transversal do cfrculo pelo mametro vertical. Idealmente, e claro, e resultado devera ser 1.
Verifique tambem se as Iinhas aparecern tracadas com nitide.z ou se as bordas e cantos parecem borrados. Urn prO~ blema desse tipo pode prejudicar a legi~ bllidade de urn texto na tela.
Se a monitor au TV fOT colorido, examine as cores das barras (ou das letras, noprograrna para 0 TRS-Color) na segunda parte do teste. Os cantos e bordas das barras coloridas devem sec bern definidos, e a cor de uma barra nao deve extravasar paraoutra. Como a densidade, brilho e a saruracao das COTes podem variar de video para video. experimente mudar os con troles do aparelho, ate obter a melhor cornbinaca». Lembre-se de que diferentes ajustes de cor cosnnnam ser necessaries, conferme a aplieacao: texto puro, por exem- 1'10, requer pouca cor e brillro medic: urn jogo exige muita cor e brilho, .
Os programas para 0 MSX e 0 TRSColor permitem variar a cor de fundo na tela pressionando seguldamente a tecla < ENTER> • na ldtima parte do prograrna. Para interrompe-lo, pressione <BREAK> ou <CTRL> «sror».
No Apple e no TK-2000, os caracteres de texto nao podem ser colondes. Assim, para testae a qualidade do video quanto a este aspecto, interrompa 0 PJ"Ograma e liste-o nil. tela. Observe se as.letras aparecem em branco puro e se nio ha' nenhumefeito de "arco-Iris' (letsas multicoloridase borradas),
Se voce conhece urn pouco de programacae grMica em BASIC,. nao tera nenhuma dificuldade em rnodificar os programas aqui apresentados para toma-les mais completes au atraentes. Procure alterer a combinaeso de cores de frente e de fundo, para verifiear 0 efeito, gere mais uma te~a de textos e caracteres graficos etc.
ii
10 PMODE 4.1:PCLS:SCREEN 1,1
20 FOR. K-O TO l: FOR J ... O to 15 s TEl? K+2'
30 LINE (R*16+J.K*16+J)-(25S-K~ 16-J,191-K*16-J),PSET.S
(0 NEXT J.K
.50 FOR K~lOO TO 154 STEP 2:LINE (,R. as) ~ (K .105) I PSET: LINE (lll, K- 32)-(141,K-J2),PSET:N£XT
60 FOR 1(-1 TO 100 S'l'EP lO:CIRCL E(127,95).K,S:NEXT
70 IF INKEU...... THEN 7Q
eo PMOD.E 1.1: pets: SCREEN 1.0
90 FOR J.O TO 191 STEP 4:B;COLOR J/48+1
28 APLICA~()ES 28
Padroe de te te de vid'eo uUlizados em diferentes eompataderes.
100 LINE(O,J)-(255,J+47),PSET.B F:NEXT
110 FOR J-O TO 255 STEP 6j:FOR K-O TO 63 ST£P 4:COLOR J/6J+1 120 LINE[K+J,0)-(K+J,191) ,PSET 130 NEXT K, J
140 IF INXEYS·~" THEN 140
150 Ssl-S: SCRE,EN 1, S: GOT? 140
55
5 fOR p~O TO 7: FOR iaO TO 7 : ~F pai THEN GOTO 200
6 PAPEJ3 p: INK i: BOIIDEQ 0:
CLS
10 fOR n"'O, TO 12 STEP 2: PLOT n,n: DRAW O,175-2*n: DRAW 255 -2*0.0: DRAW 0,-(175-2*0):
DRAW -(255-2*0) ,0: NEXT n 20 '!fOR n=10 TO 20 STEP 2:
CIRCLE INK i;12B.8S,n: NEXT n
30 FOR n=5 ~O 7: PRINT INK i iAT n.8;~ ~;AT n+10,8i~ ~. NEXT n
40 PIUNT AT 4.,8;: FOR m .. O TO 1: FOR 0",0 TO 7: PRINT PAPER n;· -I: NEXT n: NEXT m
50 PRINT AT ~8,8;: FOR m=O TO 1: FOR n:O TO 7: PRINT PAPER
OlIO ";: NEXT n: NEXT Iii
S5 PBINT AT 2.41: FOB n'~O TO 2: FOR m~O TO 7: PRINT INK m ; PAPER ];I: CHRS (641+n*7+m)::
NEX'T m: NEXT n
57 PlltNT A'l' 19,4.;: FOR n"'O TO 2: FOR m=O TO 7: PRINT
BRIG.I:lT 1: INK ml P;'PER Pi CHRS (64+n*7+m);: NEXT m: NEXT n ,60 FOR n"O TO 7: BORt'.:'n n:
PAUSE 50: NEXT n: PAUSE 50 200 NEXT i; NEXT p
10 S=S+l:COLOR 15,S,S:SCREEN 2 15 CL=15:IF S=15 THEN CL=l
50 FOR K-IOD TO 154 STEP3:LINE( K,85}-(K,105) ,CL:NEXT
55 FO.R K-65 TO 135 STEP3:LINE(1 4.0,K)~(11~.K) ,CL:NEXT
60 FOR K"'l TO 100 STEP 10:CIRCL £(127,95) ,g.CL:NEXT
70 ~F INKEY$-~~ THEN 70 80 COLOR 15.S,S:SCREEN 2 90 FOR J-O TO '191 STEP 13
100 lINE(O,J)-(2S5.J+ll) .J/l]+l ,BF:NEXT
110 Ii INKEY$=·· THEN 110 130 (JOTO 10
10 HGRZ :tX - 279:LY - 180 20 "OR XO .. 0 TO 20 STEP 4.
25 LET YO ~ XO:LX ~ LX - lO:LY LY - 10
30 RPLOT XO,YO TO XO + LX,YO T a XO + LX,YO + lY TO XO,YO + LY
TO XO,YO 4.0 NIE:KT XO
50 FOR Y - 60 TO 100 STEP 2 55 SPLaT 110,Y TO 150,Y
57 HPLOT 50.Y TO 70,Y: HPLOT 1 90,l' TO 210,Y
60 NEXT Y
65 FOR X = 95 TO 165 STEP 3 70 HPLOT X,68 TO X,93
75 NEXT It
85 FOR R c 10 TO 60 STEP 10 86 HPLOT 130 + R,BO
8 7 FOR A- 0 TO 6. 4 STEP' . 1
90 SPLOT TO 1]0 + R ~ cos (A ) ,eo + R * SIN tA)
95 NEXT A: NEXT R
100 GET AS
105 TEXT! HO~E 110 OR:C = 0
120 FOR I .. 0 TO ]6 ST.EP 3
130 LET C ~ C + 1: COLOR~ c: Q LIN 1,15 AT I
135 VLIN 1,15 AT 1 + 1: VLIN 1 .15 AT I + 2
140 NEXT I:C - 0
145 FOR J - 18 TO 36 STEP 2 150 LET C - C + 1: COLOR~ C 155 HLIN 0, 3,8 AT J: SLIM 0,38 AT J + 1
160 NEXT J
190 GET A.$
200 TEXT: SOME END
1111111
• UMA RCTINA BASiCA
• TESTANDO A ROTINA
• OUTRAS TECLAS DE RETO.RNO
• ENTRADAS SECRETAS
• RCTINA DE ENTRADA NUMERICA
"Envenene" seus prograrnas de entrada de dados com urna rotina de
grande versatilidade. Ela substnul
com van.agem 01 comando INPUT, superando v6rias de SUBS limit~~oes.
o comando INPUT satisfaz a maioria das necessidades de programa'Yao de entrada de dados, Em certas situacoes, porem, a utilizaeao desse comando apresenta alguns series inconvenientes. Entre eles, podemos citar:
- toda vez que a programa executa urn comando INPU'f, 0 cursor muda de Iinha na tela quando 0 usuario pressiona
a tecla <ENTER>; -
- urn ponte de interrogacao e sempre coIocado na tela (nos micros pert en centes as Iinhas TRS-80. TRS-Color e MSX), ou forca a entrada na Ultima linha (caso dos micros da linha Sinclair: ZX~81 e Spectrum);
- todos os caracteres digitados aparecem na tela: e impossfvel oculta-los (como se faz, por exemplo, na entrada de uma senha secreta);
- e necessario pressionar <ENTER> para terminar a entrada;
- nao existe nenhum controle sabre os caracteres que estao sendo digitados. 1)I'a linha TRS, por exemplo, se pressionarmas a tecta de atlmentacao de linha (representada pela flecha para baixo), pre[udicaremos a formataeao de uma tela de entrada.
E passive] contornar todos os problemas mencionados recorrendo a umarotina especial de entrada, que substitui 0 comando INPUT.
Neste artigo, ensinaremos como desenvolver essa rotina usando a funcao INKEYS, disponfvel no BASIC dos micros pertencentes as linhas Sinclair, TRS e MSX. IOU 0 comando GET, nos micros das Iinhas Apple e TK-2000.
UMA ROTINA SIMPLES
Inicialmente, vamos programar a rotirua de entrada de dados da forma mais simples possfvel, para que voce possa entende-Ia sem dificuldade:
1000 LET S$= .... 1010 LET CS-INKEY$
1020 IF C9-~~ THEN GOTO 1010 1022 LET C=ASC(C$)
1025 IF C-13 T~EN RETURN 1030 LET S9-BS+CS
1041) PRINT CS.
1060 GOTO 1010
Modiffque as seguintes linhas, para o micro ZX-81:
1022 LET C~CODE CS
1025 IF C-1i8 THEN RETURN
Suprima a tinha 1020 e substitua a Iinba 1010, para 0 programa.funcionar no Apple e no TK-2000:
1010 GET CS
Teste a retina, acrescentando a este pequeno programa:
10 PRINT
90 PRINT -ENTRE: ~; 100 GOSUl! 1000
HO PRINT
120 PRINT SS
130 GOTO 10
Para evitar _probJemas die "estouro" da area alfanumerica, acreseente esta Unha para a TRS-80 e TRS-Color:
5 Cl.EAR 1000
FUNCIOINAMENTO DA ROTINA
A linha 1000 inicializa a cadeia de salda, SS, que contera tudo 0 que for digitad 0 . As linhas 1010 e 1020 verificam se alguma tecta foi pressionada .. Se II resposta for negativa, 0 programa continua esperando, Caso contrario, 0 programa prossegue para a linba n030. que testa se a tecla pressionada foi <ENTER.> ou < RETURN> , que assmalam 0 rim da entrada de dados. Se foi outra tec1a qualquer, ela e coneatenada a cadeia de
safda, na linha 1030, e impressa na linha H)40 .. Finalmente, a programa retorna it linha 1010, para aguardar a proxima tecla,
lIMllTE PAIRA A ENTRADA
Ao retornar da rotina, 0 cursor continua na mesma linha de entrada. A linha 100 forca sua mudanca para a linba seguinte, mas pede ser retirada, se necessario - por exemplo, se voce estiver escrevendo urn programs de formaracae de tela de entrada. com vartos campos da mesma Iinha,
o program a principal pode ser modificado de modo a coloear 0 cursor num ponto determinado da tela, antes de chamar a sub-rotina da linha 1000. Acrescente as seguintes linhas para verificar 0 efeito obtido:
APUCACOES PARA A ROTINA
A rotina apresentada neste .artigo tem variadas apllcac;6es. Usando-a criativamente, voce podera trabalhar com diversas funQ6es lrnpossfveis de se obtsr com o BASIC. Essal rotina equivale, de fato, a urn pode-roso ccrnando LINE INPUT qua alguns interpretadores possuem.
IEm programas aduestivos e de jog os, vocl!! pode inclulr uma fungao de atrase maximo detempo dentro da rotina de entrada - ou seja, a cada repetifao do laCo de varredura (apenas para as versoes com 0 comando INKEY$),. urns variavel T de tempo po de sar incrementada. Ao s.air da rotina, 0 programs tem scesso ao T total, informando ao usuario 0 tempo, que levou para entrar os dados.
Outra aplicalf~o interessante consiste em salr automaticame.nte cia retina quando lim tempo maximo astipuledo par,s a respoSita foi ultrapassado - 0 que e ultil em jogos cia raptdez de raeioCrhio., per examplo.
55
80 PRINT AT 10.10;
un
80 PRINT @ 128 ..... ;
""~
80 LOCATE 10.10 80 HTAB 10:VT1I.B 10
APERFEIf;OAMENTOS
Como esra, a retina oferece POllCQS recursos e nao apresenta vantagens de ordem significativa em relacao ao cornando INPUT. Mas existem varias rnaneiras de ape rfeico a-la. Podernos, por exemplo, estabelecer urn limite maximo para 10 numero de caracteres que devem ser digit ados. 0 que nos permitira entrar dados sem a necessidade de pressionar a tecta <ENTER>.
Acrescente esta linha a sub-retina:
1050 IF LEN(SS)"MX THEN RETURN
A variavel MX, Que indica a tamanho maximo do campo, deve ser especificada antes de se chamar a retina, Para testa-la, acrescente estas linhas ao programa principal:
20 PRINT ~TAMJ\.NBO DO CAMPO ", 30 INPUT MX
Podemos ainda utilizar urna outra teela ~ coma < SCAPE > - para concluir a entrada de dados,
Substitua a linha 1025 par:
1025 IF C .. TX THEN EtET'URN
Note que TX deve ser especifieada pelo programa que chama a sue-retina.
Aerescente estas linhas, para testar a nova opcao:
40 PRINT nCODIGO DE TERMINO "; 50 INPUT TX
Uma retina deentrada de dados tambern nao estaria completa se naa oferecesse ao usuario a possibilidade de COIrigir eITOS, usando a tecla <BACKSPACE> IOU -c-, Adicione ao programa as seguintes linhas:
1026 IF c-a ~D LEN(SS»O THEN 1070
1070 LET SS-LEFTS(SS.LEN(SS)-l) 10S0 (JaTO 104:0
1026 IF C=6 AND lE:N(SS.>O THEN 1070
1070 LET S$-SS(TO lEN(SS)-1) losa aOTO 1040
1026 IF C~114 AND LEN(S$»C THE:N 1'070
1070 LET S$~SS(TO l£NtSSl-l) 1060 COTO 1040
A linha 1026 verifica se a variavel de salda ja tern no mlnimo urn caractereese a tecla de correcao foi pressionada (cedigo ASellS· em se tratando do ZX-Bl, deve ser pressionada a tecla < -. cujo codigo e 114).
Em caso positive, a retina desvia para a Iinha 1070, que extrai 0 caractere apagado e val para a linha 1040. Esta faz retomar 0 cursor, imprimindo-a sabre a posiC;.ao anterior.
ENTRADAS SECRHAS
Se quiser que as caracteres digltados nao apareeam na tela - para a entrada de uma senha secreta, par exernplo -, substitua a linha 1040 por:
104.0 IF SX=l THEN PRINT C$;
A varia vel SX indica se 0 caractere digitado deve ser mostrado (SX = 1) au nao (SX < > I). Para testar essa modificaeao, acrescente as proxirnas lin has aa programs principal:
60 PRINT ~ENTRADA INVISIVEl (SIM"'O} ";
70 INPUT SX
ENTRAOAS NUMERICAS
Podemos tornar nossa retina de entrada ainda mais versatil, Uma o~ao interessante consiste em utillzar a chamada censure de entrada, par intermedio da qual fazemos com que a rotina ignore automatieamente toda tecla que nao esteia incluida dentro de urn determinedo conjunto de entrada. Essa altemativa nos permite estabeleeer que todas as teclas sejam maiusculas, ou que nao 0-
o que faz a InstrUl;:io LINE 'NPUT?
Esta resposta e dirigida aoa usuaries de cornputedores TRS-SO (com BASIC nfvelll), ZX·81. SInclair, Apple e TK-2000. o BASIC padrao de sues maquinas nao dispoe da instru~ao ILINE INPUT, mas a sub-retina apraaentade nests artl.go pode substltul-la muito bem.
Como 0 nome sugere, a instrucao ILINE INPUT permits a 'entrada ds'uma linha de texto palo teclsdo. Essa Unha e armazenada em uma varlavel literal au string, norneada pela instrU!;ao. Par exernplo:
LINE INPUT X~
Nao podemos colocar outras variaveis para entrada pela mesma insttur;:iio.
Ao corrtratlo de instwU!;:ao INPUT, LI· NE INPUT nac lrnprirne na tela 0 ponto de interroga((ao - sinal de prontidao para 0 usuario -, 0 que da urns maior lliberdade de programac;:8o.
o LINE ~NPUT acalta urns linha de texto contenda vfrgulas, pontes e vfrgulas e outras pontuacdes - que nos obrigariam ao Usa de aspas, para delimitar 0 string de entrada. case utiliz.assemos urna instrur;:iio INPUT. Assim, e ideal para a entrada em precessamento de texto.
corram certos caracteres, como vtrgulas, QU, tambern, que a entrada seja apenas numerica.
o procedimento e, na verdade, bastante simples, Para ebter uma retina de entrada numerica, par exemplo, basta que acrescentemos:
l027 IF NOT (C>-43 AND C<-ot6) AND NOT (C)=4B AND C(=57) TREN GOTO 1020
1027 IF C()21 AND C<>22 AND C<>26 AND C< >27 AND NOT (C)a28 AND C(-37) THEN OOTO 1020
Essa linha verifica se 0 caractere entrade e(!lta entre 0 e 9 ou se e um sinal de mais, de metros, vfrgula ou ponte. Se nio for urn desses, retorna para a linha 1020. de espera.
FAMiliA
APLlCA~()ES 29
CONSUl:
AOS
os
•
CARR E IRAID IN HEIR 0
COfIJTATOSNIAGENS
•
•
PERSONALIDADE
•
AMOR
Muitas pessoas nae saam de casa sem consult-ar 0 horoscope: Voce pede
nao, ser uma delas, mas certamente sa divertira ouvindo a que 0 computador tern a dizer sobre seu destine.
do motive de muita controversia. Cientistas de hist6rico tao distinto , como Einstein e Jung, acreditavarn na influencia dos astros sobreas pessoas - bipotese rejeitada pela maioria des seuscontemporaneos. Estudos multidisciplinares recentes, contudo, tern apresentadc algumas evidencias dif:fceis de se refutar. Seja como for, 0 papel dos astros na determinaeao da personalidade e do. destine dos seres human os e umaques-
Astrologia e horoscopos intrigam as pessoas desde a Antiguidade, e tern si-
Hio que permanece aberta a discussao,
Ainda que 0 terna naa a apaixone, voce podera passar horas multo agradavern com seus amigosem torno de urn computador astrclogo. Paraatribuir a maquina esse papel, basta digitar 0 PfQgrarna aqui apresentado. Ele Iornecera earacteristicas de personalidade de cada urn de acordo com seu signa solar, assim como as previsoes para 0 proximo ano. Estas se dividem em quatroca-
APLICACOES 29
•
tegorias: Dinheiro/Carreira, COD tatos/Viagens, Familia e Arnor ,
Como os horoscopes publicados nos, [ornais, 0 nosso iambern nao leva em conta a bora exata do nascirnenio - dado que 0 astrologos u am para forneeer uma leitura rnais completa do mapa
astral de seus cllentes, -
OPr,:OES
o programa pede a data de na cimento do consulenre e diz 0 seu signa. Oferece-lhe, em segulda, duns opcoes: obter urn perfil de ua personalidade ou as pre i oes para 0 proximo ano.
Se 0 consulente escolher a primeira alternative, 0 program a seleclonara duas senteneas relacionadas ao seu signo, das oito que tern guardadas na memoria. Se optar pela segunda, tera que indiear um des seguintes topicos: Dinheirc/Carreira, Contatos/Viagens, Familia e Amor. Duas previsoes vao enlao aparecer, A maquina tern somente duas guardadas para cada topico (par signa); portanto, nao havera nenhuma variacao na re - posta, e voce fizer novamente a mesrna escolha,
o PROGRAMA
Uma parte do prcgrarna e especffica para cada cornputador. As linhas DA· T A sao comuns a todos, embora algumas alteracoes sejam necessarias, como rnostramos rnaisadiante,
,5 POKE 23658,8
10 INPUT ~DIGITE SUA DATA DE NASCIMENTO (DIJ..,MES,ANQ) "; X,Y,2
20 I~ X(l OR X>31 OR Y(l OR Y >12 THEN GOTO 10
40 aOSUB 700
90 eLS : PRINT AT 1.1;"'SEU SI GND E "j INVERSE I,A$
100 PRINT AT 5,,1;" VOCE DESEJA :'" "l'AB 3; weD PERFIL DE P'ERSO NALIDADE"'TJ..S 3;"<2> PAEVISAO PARA 1988'" TAB J j ." (N) ENTR.AJ:I. N OVA DATA"
120 LET KS-INKEY$: IF K$<-l" OR KS>"'S" AND KSO"W THEN GO'TO 120
130 IF KS-"2" THEN 140 IF KS .... N .. THEN 150 eLS ; PRINT AT
(A$»)121 ;A,$
160 FOR B~l TO 2: LET A,cINT ( RND*4.}+1
170 FOR N~l TO A: READ BS,CS.D
S: ~EXT N .
180 PRINT ": PRINT BS'C$'D$:
NEXT B: PAUSE 0: aosus 700:
GOTO 500
300 CLS : PRINT AT B,8;"PREVIS
GOTO lOa 001'0 10 0.15- (t.EN
AO SOBRE :"" TAB, 4;" c 1> DINlIEI RO/CARREIRA~'TAB 4;W(2) CONT~T OS/VIAGENS~'TAB ~i-<3> FAMILIA
ft'TAB 4;~<4> AMOR "
310 LET K$-INKEYS: IF K$=·· THEN GOTO 310
320 IF KS("l~ OR KS>-4- THEN aOTO 310
330 RESTORE (4000+320*(S1'-1):
FOR T=l T'O (VAL K$) -1: rOR N=O TO 7: nE~D BS: NEXT N: NEXT T J15 CLS : PRINT AT 1.IS-(lLEN 1>.$) /2) ,M'"
34Q FOR T=O TO 7: R~AD BS:
PRINT BS': NEXT T
5010 PRINT AT 21,10; "OUTRA VIZ 1"
510 IF INKEYS="S- THEN GOTO 90
520 IF INKEYS(>-N- THEN GOTO 510
530 STOP
700 FOR T~l TO 12: RESTORE ( 1000+250"(T-1»
710 READ AS,A,B,C,D
720 IF 8=Y AND ){>=A THEN LET 81'00.1': LET T"12: NEXT 1': RETURN
7 30 IF D=Y AND X<=C TH'EN LET ST"'T: L:ET Tc12: NEXT 'r: RETURN
74.0 NEXT T: RETURN
10 PCLEAR 1
20 DIM 85(11.7,3) ,0(3,,11) .ss ru ).PS[l1,3.7)
30 FOR K"O TO 11: READ S~HIO. rI(O ,K) ,D(l,K) ,D(2,K) ,D(3,K) :FOR Jo TO 7:FOR L-O TO 2:READ HS(K,J ,L) : NEXT L,J.I<
40 FOB R-O TO 11:FOB J-O TO 3:F OR L"O TO 7:READ PS(K,J,L) :NEXT
L.J.K
50 CLS:INPUT-DIGITE SUA DATA DE
NASCIMENTO (DrA.MES ~ ANO)-:
D, M.A: DaINT (0) : H'-IN'r (I'I)
60 U' D(1 OR D)31 OR 1'1(1 OR M>l 2 OR (D> 3 0 AND (M=4 011, M-'6 OR 1'1"" 9 OR 1'1"10» OR (0)29 AND M"'2)TR EN 50
70 SS .. O
80 IF M<D(1.SS)+12"CSS-2 AND M- 1) OR M>D(].SS)-12~(SS~2 AND M~ 12) OR (M''''DU,SS) AND IXO(O,SS) ) OR(MgD{J.SS)AND D>D{2,SS) TH EN 55-S3+1:GOTO 80
90 CLS:P.RIN'f"SEU SIGNO E ":8$(-9 :9)
100 I?j(tINT: PRINT TAB (10) ~VOCE 01:
SEJA:"
110 PRINT:'PBINT TAB(3} ~l- PERF! L DE PERSONALIDADE"
120 PRINT TAB{31~2- PREVISAO PA RA 1985";PRINT:PRINT TAB(3)"NENTRAP. NOVA DATA~
IJQ K$~INKEY$:IF KS<-l" OR(KS)" 2'" AND KS<>"N'· ) THEN 1.30
230 FOR ](-0 TO 7:PR~NT @64+l2*K -J.2*(}(}3) ,PS(SS,IlAL(KS:)-l,K) :NE XT
240 PRINT @44.8,~ OUTRA VEZ (SIN I 1"
250 KS"'INKEYS:lF KS<>"S:~ AND K$ O"N" THEN 250
260 IF KS·"S" THEN 90 ELSE CLS:
END
20 DIM aSCll,7,ll .D{l,lll ,SS{ll ) ,P$U1,3.7)
30 FOR K"'O TO ll:READ SSCK) ,0(0 .K).D(l,K} ,D(2,K) ,.D(l,K) :F.'OR J .. o TO l:E'OR L=O TO 2:READ RS(K,J • L) : NEXT It. .,1. K
40 FOR ]("0 TO 11: FOR ,'''0 TO 3: F OR L-O TO 7: READ P$(K,J,L) :NEX
T l.J,K
50 CLS: INPU'!"'DIGITE SUA DA'lA DE
NASCIMENTO (D,M,A.) "jD,M"A:D=I NT(D} :M"'INT{M)
60 IF 0(1 Og 0>31 OR M(l OR 1'1>] 2 Oil W>30 AND «(1=4. OR 11"'6 OR M
-9 OR Mall» OR (D}29 AN'O 1'1'"'2)
,'UEN 50
70 SS"'"O
80 IF M<D(l,SS)+12~(SS=2 AND (1= l) OB. M>D(3,22)-12*(S:S=2 AND M= 12) OR (M=D u. SS) AND 0('0(0,55) ) OR (M~D(J,SS) AND O>O(2,SS» THEN 85=55+1: OOTO 80
90 C['S:PQ.INT "SEU STCNO E: ~;SS( S8)
100 PliI.INT': POINT TAB (to) : ·VOCE D ESr.JA :"
110 PRIN'r:p~llN'r TAB(.1) ,~1- PERF IL DE PE:RS<lNAt.InAD.E"
]20 PRINT TAB(3) ;"2- PREVISAO P ARA 1988":IHUNT;PRINT 'rAB(3) ;"N - ENTJ;tAQ NOVA DATA"
130 KS~TNKEY$:IF KS(~l" OR (KS> ~2" "ND KSO"N") THEN 130
230 FOR K = 0 TO 7: LET YY = 6 4 + 32 '" K + 32 * (K > 3): STAB
en - 32 11 INT (YY / 32»: VT
AD ( INT (WW I 32}): PRINT .P$ (8 S. VAL (l<S) - 1.K): NEXT
240 VTAB (18): PRINT W OlITRA V EZ (SIN) 7" 250 GET K$:
K$ < > WN" 260 IF KS a 2'10 IF KS = ND
1- DINHEl 2- CONTA )- FAMIL
IF KS < THEN 250 "S" THEN "N"THEN
90 HOME
AND
lINHA DATA
As linhas a seguir podem ser intraduzidas como estao no MSX e no Apple. Se voce possui urn TRS-Colo.r. deve usar aspas em todas a Iinhas DATA que contem dois pontos (:) au vlrgula, as usuaries do Spectrum precisarao usar aspas em todas as linhas, exceto naquelas que contern numeros.
lO'OO DATA PEIXES, 20.2,20.3 1010 DATA Vnee 6 c m~dlum do
1020 DATA ·zodfaco, aendo 0 _a19 lntuit,vO· 1010 DATA e ~enBtt'vo doa 81900B.
1040 DATA voc~ ~ pledoeo e
)050 DATA Be envolv~ pront8m~nte com 08 1060 DATA problemas d outraB pe8aoas.
1070 OAT1I ·Vcc~ a.bsorve A3 atmosfera., e precle·, de'
)080 DATA "Urn amb,ente ileQre. envolvendo-B e_ com"
1090 DATA a'llleiea Que 0 Cue .. se !!entl. ~ra nqull0.
1100 D1ITA ·voc~ ocata de ~Icool. e preC.Ba aey-It
III a OAtA ell I de doao pa e a nll_o !Ie ... bebeda r . 1120 DATA· "
113() DATA voc~ ~ tao oenero9o que
ll~O DATA frequente",ent" nao tem d 1 nhe i r c 1150 DATA a b~sl&nte p~ra voc! meama.
U60 DATA Vocl! e Um orano. ar t t a t a . Tem dom U 70 DATA "para Ib~~ 1 ea , dance , de.enl\o· 1160 DATA au tetoQrafla.
1190 DATA "Unc@ V,"" e r e s p1r" rei1Ql.lo," 1200 DATA Iba~ nao nece2sarl"mente nO
E:
UIQ Dl\'rA ae nt i de lorm .. l da palavra.
1220 DATA ·CornpallbilJd.de: v.ro"_, G~.,eoe,
1230 DATA Sa9ltar,o.
124:0 DA'TA "core,,: verde, azul,· 1250 DATA AQUARIO,21,l,19,2
1260 DATAUoc~ cOfls1dera aeU9 a.~QO~ com~ 1270 DATA "Benda parte de sua familia. tant
c"
1280 DATA quante "euft parentes.
12~O DATA Voct ~ independente de!!d~ 1)00 D1ITA ·pequeno, ma. terd uma ca".·
1310 DATA ee.pre che.a de ... i008.
1320 DATA Vocl! frequent. club .. " " a"soc)a~1
e9
13,30 DATA "al~ do que 0" out r oe "'91108 1340 DATA e podOl 8e[ um me.bro ~o CND. l350 DIITA ·Voct ~ rnverrt i ve ·e i nevador ," 1:160 DATA e t ee Idhas e ccncep9l1e ..
1370 DAtil avan~ada$.
1360 DATA voce tem dlflculdade e. ~e
1390 DATA "reportar a al0u~m, _ pode aero l~OO DIITA laolado per cauaa d,880.
1,nO DATI> ·Voe.!! ... "ate roupa .. bi2arra s , • 1420 DATA oue alo mal .. 'ntere~5ante~ l<l30 DATA do qUe el"oa.,t~!l1
1<1<10 DATA 'Voci! ellcolhe c.11I0:1118 !lOCI0115." 1450 DATA polItICO! OU enoenharta elet~Onlca 1460 DATA como c.r,etra.
1470 DATA ·Cempatib.l1dade: Caprlcdrnio. Li bl"a. Ii
HSO DATA 'Cor: azul f~.ret<i!.· 14.'.10 DATA
lS~ DATA CAPRlC6RNIO.22.12.20.1
l~lO DATA voce ~ 0 ~a.~ amblCloeo dos
1520 DATA ·eIQnoo. tca~ando pianos do"
1530 DAtA carrelra deede pequeno.
lS~O DATA AB erlancas de CapricdrnlO
1550 DATA pareee. ser adultos S6"00 e
1560 DATA m~duroB deade c nasc.mento.
1570 DATA VDC~ preclsa se cesouaedar
lSBD DATA contra c r@umattsmo e todos O~ IS90 DATA al!mentoa que atacam a esp.nha. 1600 DATA As carre. rae para 0 ca~rlcornlano 1610 OATA 'ee relac.onam a _atem3tica."
1620 DATA ·contab.lidade ou financas."
1630 DATA "Vocl II econOmlCO. mae"
1640 OATA tudO 0 qV~ compra t de
1650 DATA qUalldade e reltO para dura ••
1660 DATA Qoce II caracterlzado pela SUa 1670 DATA conduta trrepreens!vel e olhar 1680 DATA ~"rI O.
1690 DATA Vocl! tell mde conhecldo9 do que 1700 DATA 'a1l1908; seua verdadelros'
1710 DATA a_1Q08 slo Bua famtlla.
1120 DATA ·Compat.bll,dade: Touro. C~ncer.· l130 DATA AQY&r,o.
1740 DATA ~Core8. Prete e tons e~Luroa.-
1150 DATA BAcrlTARIO.23.11.21.12
1760 DATA voce ~ UII ot1mluta de na9Clmen~o 1770 DATA e ~ dlvertldo e Com um Qrande 1780 DATA 9~90 de humor.
29 APLICACOES 29
,
1790 DATA Voc! Q09 a de f,,"tas e' de 1900 D ... TA ·part! cipn de .lOQOB, lI1a~" 1810 DATA seu traco 880 be Ls s ccxaa , 1820 DATA voce adora Vla)ar e conhecer 1810 DAtA novas peS90as.
18~O DII1A
laSO DATA ·Voc! tem bOm ouv1do para l(nQuae
2050 OAT ... olhos rrene t r-ant e a a por Beu 2060 OIlTA narlZ xareta.
,070 DATA S~le meaeS arlte9 ou depot. do 2080 DATil n,,~clm"nto <le um EscorPlao 2090 DATA um parente Iaiec~.
2100 OATil I'Oc(! ~ J nt:ere9sad'o em apr ertde r 2110 DATA ~ .dara re~civer NlaterJ08
2120 DATA
1860 DATA e pode falar !alar fJuent"lI\ente 2130 DATA gomen e e mu t he r ee de ["corp, a " ,..1
1670 DATA mUlta~ d~l~B. c
18BO O"'TA ·Carn"" .. ; )ornal."ta. radul.sta 2140.DAT1\ mUI to a r r a r do s pe 10 eexo '>I>(I!!t". 2150 DATA
~16a DATA ·C3rrelra. pol\cJ~l. p.rUrcll"." 2170 DATA "'PI~) c rt 10"0. c I em::1 a a 5nr J ri19. lot 2180 DATA cer r .... i r '1 I"'o.m p091il;.lfl d,.. pt -ter 2190 DATil VQC~ nan" llIull" r.ll"nt"
220Q DATA mOB udo 0 q~e Idla P
2:tJO DATA .! nCl 91VO e r ~ ~ ve aea , Ill.lf ":Jill v ~ .. :1220 OIlTA ·co",,,"tlb,lldade ('~nc'.,. Llbr ... ·' 2230 0.0.1'11 ·cor: M.urn"."
2hO DATil
2250 DATA LIBR .... 24.~.Jl.IO
2260 DATA vo,~ • n ,~~lvdnte do
2270 DATil "zod r ace , r!!e""h"cldo por" 2280 OATil euas boa~ m .. nl'tr"!l.
2::.!90 DA1'A ·VOCill nan ~ul=ior ta f 1 C.1f sO:· 2)00 DATA P,~c'9a ~d compnnhld ~p
2310 DATil out,&B p~!la~a9.
2320 O ... TA ·Voc~ ~ um pxcelen e ~ntltrl~n.· 2))0 Oil,. ... e <! seu r t c hAbll Pd" cr r ar "lid 2340 DATA atrno~terd de ndrmOn,a.
12
1890 DATA ·profes8or, tllOBoto," 1900 DATA e8~ortl~ta.
1910 DATA ·Voc@ ~ mUltb ~inamlcn. e"
1920 DATA .. cha diLie.) (lca, parada em 1930 DATA um me8!lO luga. 0 tempo bastante 1940 DATA para 9~r mon~Qamo.
1950 DATA ·voce adora animalS. e Q jo~o.· 1960 DATA "Infelizmente. pode aer uma fraqu
eza ....
1910 OATA 'Compatlbllldade, Pe1xe ... V!r~"m.
1950 DATA Oemeo!>.
1990 O ... T ... 'Cores; .. zul royaJ. vlol~ta· 2000 DATA £SCOR9IIO.24.10.22.l1
2010 DATA "Voce ~ 0 mais apa1xonado dna ~lQ
nos~"
2020 DATA "emo t r vc , e. BiI! c:ontr,ar1.ado." 2030 nATA pode ger v,nQallvo.
2040 DATA voc~ ~ ceccnheCldo POT BeUS
A PLlCA(OES 29
2360 D~T~ ~ l'bi08 bem !eltoB. E $ofre
2370 DATA doa rln$.
23BO DATA VBC~ ~e yezea flLa ~palKnn&~O 2390 OATA e nunca flea mUito tem~o R07lnho. 2400 DAr" As car r e i r.as parol" t r br i ar«
l~lll DATil ·po<l,," i nc l u lr: CAbe I 11'\ r e ; rn.· 21120 D1ITA ""atetICl!!!ta. )iJlZ.·
2430 D~TA ·BdVOQ~do."
2<140 DATA seu bQ"m Bena{l por!! .. 1 a~ArlC! 1 a l~50 DATA d~ na~mnnla as ~~a9 r~up~9 l~60 DATA pela boa e9CQlna daa cores
1~70 DATA ·~omQat.hllldad~: AQUarlo. Ar'~B,
2~90 DATA 1;:9corl' 1::1<> ,
24<)0 DATA ·Corel'! . <le 10(1] "a>ltel
2500 DIIT ... VIRGEM,1~,a,Z1.9
as i n DA'I'II 'Jocl! II! hlPQ .... -rrdr 1a<:o a nut'led va,
Z520 DATA a lu<;Iar nenhurn gem Uma !;all!a 2530 !lATII de plluJd!'!:I"Jrd "l""mil d" .. rto;a. 25'1D D1ITA ·vo~~ t~1!I urn COtOO 9a1Jd~vel.·' z!t~[J VA,!A md~ nunca ,,,,,1.1 C<.in ente co", 9 .... lS60 QATA dPar~cl~.
26QD DATil -VC>C~ o! r r r H;a pnr II~! ur e z a." 26 0 DII1'A. !>, .. "tando mUlla "ten,';o aO'l
2620 DATA det~lhe9 em ,odp~ 03 ilBI>~cLDa 98 .... d ...
2630 DATA 'Carretras: b]oll~tecarlo,·
264~ OA1 .... "ea at.t ar i ee • cr t r r ee , ct ent t.e t.a " 26~O DATA ou mld.eO.
266C DATA voce proyav~lmente n~a l~r~ 2670 DATA "(ma tdmlLld mYlto ~Tdnd~ - Uil!O CAtll ~e!lr:t~deM\ dcl!'lXB voel! due-it e , 2690 0111'''' -VQl:~ ;l I'r,!l L] CO por ria ur e aa,
2700 DATA "e. ~e rabalh.r em Um eacrlt~r'o
271(1 DATA ,",eroi Buuto orllanl",~d ...
2720 DATA "Cab~atjbllldft~~: Pei~~a, Q~~o~,
2730 OATil SaQlt&rIO,
21qO DAT~ 'Cor: Atul ~~~uro.· 2750 DATA LEAO. z.t. 7, ill, a
~760 !lATA "'mboa OJ! "i!'K e ", ves tem as 2]70 DATA roul'&a e JdJlIl,~ ali".:" ce r aa e 278C Oi'lTA 111(> s ner r .... e,jl'llf!l'lte: valdou~. 2790 DAr.., "Como Ol! le<5ell. vQ,ee pode" 2BOO DIITA tar UMd "rand eaoe\elra 2S10 DATil dourada.
2820 DATA ·voce adora drama. e ~o8ta de'
pacSlllu' "e'u tell1po l.v,e 1]0 tt':.,tro eu c\.ne.m~.
Sau Qoeta por comldas fortes ~ um pi!lri~o para aeu corat!io.
21110 DATA VDCI! I! prope:nllo a" ataqueft c .. l'o1t ... e ga.
2880 DATA Voel! i!! ",enerollo COli lillY d 1 n"lie I ro 2890 CATi'I - ",iU'I nl<) ~el, lUI <lIe !II:!,
28:>0 D"TA
2f1ol.0 D"TA
28S0 DATA
2660 OJi.'l'A 0."
2930 OM'"
29'10 DATA Seu lar !,oda !leI" U]]a g~an<ll!: 295Q DATA ~alla dl!:lI~l'llda. V1~lnhoB ala 2960 DIITA ilJlleaca ao lll'n,l e5I'ilI~D.
2970 !lA'!'A ·COIOPatlbll1dad .. : Cane .. r , Ane~.· 2980 DATA ·Co .. .., ... : ouro " Amb ..... •
2990 DA'f~
3000 DATA CAllCER. 22.15.23.'
J010 DATA "voce 6 I!IUite tiIldo. ,,~conaen<lo" 3020 DATA seua Ilndol!l olhos
JOJO 0"1A "ob Q.ilpebr.a,1! lIub~i8I1i",,'.
304.Q I>ATA 'Jgcl Bellprt' penallneceril pre;;O a )050 DATA seu. parent"I!I(QrlnelPal.ent~
3060 OA~A sua mae) .ea.o ~epole de cae ... <lo .• 3010 DATA ·VDCe oil nor.aI_lIente Uilldo •• a,,-
3980 !JATA ·core!!: A2Ul. 'rolla. 3990 D:1<T,II
4CC)O OATil E .. f eve re.i r-o . !jell t.f'aba'lho ~;;"II 4.1)10 01lTII ·"al" I.Dolild" do que ono.II ... l. .H120 OATil e vod! t,,,«1 que) ",por ",,,,, t a 4030 OA,TA ;o.llt<>-ducl.pI1na,
41140 OAT'I\ ·l'la p~il!)a,ve'a. tel"·
4D5Q OIlTIl deOl1l83.iO CltLroD t;)o.-.
4060 OA1A ~1~oen9, 4070 DATA
40eO 0.111/1. vo<:~ "',ill ~!lr"""Har UiDl l"nQo ~,090 DATA ·f~rHU!o O!!m Ollt.ubr-o}Novelllbro· 4l0!l DATA 1Jl.'rofundando-se no!'! ml!'!to:!1"lO!l
4110 OAT'" d,,~ a nti~'''' '''P~i'"'''~, '1120 OATA. E:1!1 "",,,ho. V'DCe' deve r d
<lBO OAt1l adotar dlt!.!de.~' !Ila.~ !i!~rl"~
,4140 'DIITA "d 1 a.n to: <la,,, aeua I'r obI "m"", de "d 3610 D,II!A "E! (lrGP e naa a Bo!rlH cor t e a ou co c"
J08~ DATA lutarla at~ a .~rte para lG90 OA'Ti\ I'ro teQ""r ;;UlI, fa,milia.
:llO'~ DII'I'''' Sua "'''''''" ~ "ell e aat .. lo e ,"oll1"nte lllO !lA~'" ... ngo" mUlto ""I''''C'''l''
H20 1)/I.r1\. 11 Ue'luentam,
lJJO O.o.'TA "'a,,~ '1ostana de vrver lIerto ll!lO DATi'! od'd. ;'(gua - um n'D, r iaene O,y' )150 DATA ~ bel~a-mar,
lll!iO !lATA -Carlrel r a s : ,.,n.fe.r .. e i r c , Jard ,nellr Q, .IIaru1hel;fOr""
J.l?1l DI\TA "coz,fihelro. (lrOfes.90r au [otOIl'rili to .•
nsa D]o.TA
Jl91i\ O"'TA ·vo,,~ " .. pr"nd;., .. 011"-",,,,",0, ". nOO 0"'1\. ado r a collecl.""". "fit 1 Quidad:",,, . 3210 DATA .... oce tel!' bo .... "Ol<l·na ;(otogrdf"Lca, 3220 DATA "Co .. patlb) I1da,d,e: Lelc, ESCDlrP"laiO
J2JO DATA ·'COrll!'!I ~Bran<:l>e prat.a,· HotO DATA
3250 OAT1I GE:J1EOS, 22.5.21.6
3260 OIlTA ·"0"::'" Ec do hpo r;lIbll'lto, " tee",." 1270 DATA ·~e~broll lon~D~ e deloado9,· J260 DII'I'A
n90 D.IITA ""'o<"~ falapeloll ee t eve t oe ... " )30Q DATA po~ .. rilil P;H!l:'iilr 10m IH~ l-nte"t'"o 11lO OA:rA Calanllo OO!!lern~ blillal u:l,atle,s , 3.120 DATA vocl! II Q m.illOJ cceUfllcat.Vg d" J,]·lD DATA ·'~ooltilc", r eccnnec i do p"l,,·
33;[0 DA'A 1100'10 COmO (lo!lta de falar C'OI11 "'I iii aos,
l3S0 DlliA ""bo", 0" ",,)to!! .90([,11111 do!! ner vca 3350 [).lIT'" .'~ 'nl'!l!n1&, ~ devell' Be pre<:ave·," ll70 OI\T1I control a "'1tala,
3360 DIITiII • sue e"" .. e"r~ .~elllpre de"" r t .. :" JJ90 I:!AtAvo,i! .,,,t.rit !le ... p .... v',!I,tlmd" u", ~4~D DATA "'~ln~o OU amlqo.
H.lO 0111,0, \locI! !Ie ~en"a "ufQc~d," nUlI
l~20 OATA • r e 1;1Cl on .. .,,,,,[,, iIl".l~ doJradO-llro.· J4JO 011'1''' "e ,w> t a oe prend,l(' a un; COII'l'anne lro~a) .•
4410 nATA vL&jar.ll ~t~ d'atanciaa para 44.2:0 DAn. encontrar Ileus ent ee querldoll. HJO DATA
......... 0 nATA Voel! provavel.ente vlajar4 4450 DATI. ·no (inal ~o ano (Sete.bro/" 4460 DATA ·Outubro), com 111I190~,"
«(70 O."T"
...... 80 D"TA vocl! VIIi PI! g~r 0 .es de Julha ~490 DATA -e. caBal e deve to.~r·
4500 DATil ~ui.d .. do para .nlo e"90rdar
4510 DATA multo.
4520 DIITA 1.1-. de~ent~ndl.onto co. 4530 DIITA alout. da f •• tll pOde 4540 DIITII oearr .. r ... ~ar~o.
4550 DATA
4560 DATA U •• ntenso relacion .... nto pods 4510 OAT ... "co .... car ea II e,t .... bro ., eo.ecando· 'l580 PIITA de a190 que para OD out,ro"
~-g0 ilA1'A nl<> pa"",,,va de Wla "aO""r a ,
4~QQ DATil 0" ho.~na poda. Ie val'
4.610 DATil co.pro.at.idos co •• flvura da Q620 DATA ·.Ie ell De.ze.bro, .aB III iQrov~ve I"
4630 D .... T ... qu~ esta "ltua~lo dura atf! Ja.nelr
o.
4640 DATA Ho final de 1988 YOCe pode
(650 OAT'" ach"l" que crmquhtou u ... 1>0111 .. 10 4.660 O .... TA "de autorldade. r;:o. opiniG",· 4670 DATA "cl",,,a." '" obj&.tiva·II,"
4680 O .... TA voce nao deve ftel" lIulto
~690 DATA Di.p4tico co. aquel"s que nlo 470iil DATA "0 alo: <leve panaal' WI p"uco· 4710 DATA •• 1. "II voce Ilea-a.
4721l OAT" vees !Ie ton, .. r" Ilui.to popullLr 4730 DATA "no trabalho ~ janeiro. oracall· 4740 DATA a UlDa orill1de capacidade de co.un. cae:!o.
4750 DMA ••
4760 .nI>.TA • prov~.vel ""a ora'nde v"aoel! 4770 DATA ao ellterlor em Bete"llbro. TOile' 4780 DATil cuidado CO. roubo".
4790 DATA
4800 DATA 'Sua <;alla. " •• arco, parece.r"· ,,810 OAT ....... e ... po /Ie batalha. T"nte
5160 DATA A partIr d .. teverelro cOllecar' 5170 DATA ~. anOl de IlUl~a at,vldade para S180 OAT" ·vace, rota de can.·
5190 OATA
5200 .OATA Um romance pode co • .,~n no 5210 DA'I'A "Natal ... all talv .. z ." ... " 5220 DATAl atra.cllo H,nea,
5230 DUAl
5240 0"''1'1. "UAa rela,Ao .alB profunda," 5250 DATAl ·at~ corto ponto frivola, pod .. " 5260 DATA ·co.e~ar ~ Junho.EBta pode"
5270 OAT" ser uma rela"loud'ente e d .. _H.
5280 DATil" d .. "peito "I! aloulI ... "
5290 DII.TA "diverQan.clall, voce trabalhar.a" 5300 DATA ·dura, Calla f .. z ana plllIsado, para
5310 DATil con",oUdar "ua pO!lI,,!o "0 trabalh o.
5320 DATlI \loce deve, !Ie preeaver ~ontr. 5330 DATil '"aHto" dellnece"~'rio", tanto' 5340 DATA ""eU$ como dall outr." ~essoaa da
Cil!!i!llt"
5350 D ... TA ·que tandem a !!er ~tTavaoanteo." 5~6G DATA voce Be envolvera com trabalho
4820 DATA -"vi tar atirllac~c" a .. b1 vua!l, " 5]70 DATA "de caridade nOB prdx,",os a"OB,·
Q030 OATil "qUI! pod&. ocaalonar U. ro.pi .... "t 5300 DAT.'" aendc bom e., aconee Ihar , .. ""',, r ,
0." 5390 DATA
484.0 .0."'1''''- \locI! pae".r" 0 lIl!tl de Abn 1 5400 OATil voce vat quen,c vla,)ar ell Julho
4850 DATA preocupado co ... decor.~ao ~.. 5410 DATA IUS ter' que eSI> e. r ar por ,;."osto
4860 DATA au. caDa, 5420 DATA at~ ter d,nhe.ro ° suf,clent ...
4870 DATA 5"30 DATA
4800 DATA ·Pode suro.r u. callo e. A"oato,· 4890 O."TA ."8 voce deve to .•. ~r eUldado para 490~ D ... T ... nlo s .. r nell .ulto do •• nante
4910 DATA ne. e~aQ .. r.da."nt ... teneioso. 4.92'0 DATA Ull rei aClonllroento duradouro
49310 OAT ... "uroir.a co. alQu~. QU e co,"partilh a
4940 DATA alQUlla atividad~ ou Intere"se 4950 OAT ... "co. voce, " .. Nov..-bro."
4960 OIlTA A p01l1,,1I0 doe plaru,tam _ 5"teAi>r
°
4970 .O ... TApode "I.Qnlfica.r alQUila .udan".
4950 DATA ·na aua "arretra, qu .. voce plan"J Ava'"
4990 DATA dellde 0 ano pamsado.
5000 DATA Voel! e"tar' fAnance'r .. ente be.
5010 OAT "e. 1988, .. ta.ra donaUyo" a"
5020 OAT InstHullOO e " de "add"de que
5030 OAT cUlda. de .do"o",
50,,0 O ... TA voce "!ltar4 e~volvido em u. Qrand e
5050 DATA ·n .... delo durante t"do 0 ana," 5060 DATA a part.r de levereiro.
5070 DATA
50aO DATil "Voel! "e 110~r~ a tanta" a"socia~ del!l,·
.5 090 DAT'A "part I cur a rl\ente de em,iI no euperi 0 .. "
5440 DATA voce vai sen .r qu sua f~lla 5450 DATA ~m peso que .. que voce fa~a
5100 0"''1'1.. ~u .. talve. e"que"a de que 5110 DATA te. u.a caea.
5120 OArA voce pa""ar~ por u. pariooo 513,0 oA'tA ·.U1tO ro.antico ~. Bey lar,' 5140 DllrA e. Janeiro.
515,0 OAr ...
2' APLl~{JES 2'
5460 DATA cureo ~uper,or. H10 OAT"
5480 DAT~ ~ pO~8jvel Que ~ua !ae!l!a n!o 5~90 DATA receba beE u& amlOo Beu que
5500 DATA <! conhec1do por "er mUlto otlml~t
a.
5510 DATA
5510 DATA Da seounda ~~ana de Noveabro 5530 DATA at<! Oezembco "XlsLe a p08~ibll.da dt
55~O DATA de comec"r Uma Intensa rel.~lo 5550 DATA co. u ... pe .. aoa ea 1" ve I h. s ,
5560 OAT" Um rom&ntlcc c""o de a~Qr pode :5-570 DATil. 1I'c:amecar no mr e i e do ane , m.j)9· 5580 DATil talv"~ desmorene lie voc" n~o
5590 OAT ... det"1IT de pen"~r -t~nto no traba1h o.
5600 DATA Oa ""qunda met.de de Junho .t~ 5610 DATA ."8 de aoo,,~o YOc@ estara
5620 DATA preocupado em aflrmae Bua carrelr
e .
5630 DATA
5~O DATA F~nancelra.ente voce estara ~650 DATA conBolldando os Q .. nho~ Que 5660 tlATJI 'obtev!! e. 1987. truto de"
5670 DATA 10noo ~ culd.doBo plane, .. ento. 5680 DATA \Ieee " .. I !Ie no t ar cad. yez
5690 DATA cals Intere!l.ado ". dl!1cutlr 5100 DATA OU tallr Bobre te •••
5110 DATA politico".
5120 DIITA UIIII V1<loem ao e"tedor ,
51)0 OATil grovitvel e. HalO. provavel.ente 51~O DATil cu.grlndo om clrCUJto turC.tlco. 5150 DATA
5760 011'1'11 Por um perfodo de dez anea voce 5770 DIITA .entlr4 ~tr.~ao por •• dar-Be 57eo DATA p.r~ algUD luaar pert. de 4gua. 5790 DATA·
5800 DATA e provi1vel que aioUJO .ellbro de ~BIQ DATA !lua fa~111a ae lntere"ae por 5920 DATA uma rel19130 em particular 5830 OilIA ou a l co .. llul ar .
5840 DATA No final de Outubro U. 10noo 58SQ OAIA case de lImor !Ie lnlclara. 5B60 DATA' •
5B70 DIITA
SSDO D",TII (0,"prOlOl"",,08 1lI!porU.nte$ .. trio SagO DATil anumldo! lIeio~ ho",,,n" no ~01l"!:0 5900 DATA "de outUbro, e pela!l mulhere~" sno OA,.A, no COIM,",O de, N.," .... bro.
5920 DATA Em junho voce e"tara se
5930 DATA "reallUndo com Bua car~el.ra." 5940 DATA fazendC mu.t!" vla~enm
5950 DATA relaclon.daa • Beu trabalho. 5960 DATA Em Outubro voce recebera 5970 DATA qrande so ... em dlnhelro
5980 DATA fruto de ~nt1l1o" nt9<1<:108 _ 59g0 DATA
6000 DATA "Por todo eate ane , eo.o· 6010 DATA "fOl ., ~no paBsado. voce"
6020 DATA e8tar~ t.l an~o de Dua ear'r ei r a , 6030 DIIl'A
6040 DATA &11 Outubro/NOve.bro voce mera
6060 DATA e eat.r~ nUD e~.do
6010 O ... TA de .Ulta despreocup.~lo. 6080 DATA E. 19B8 voce vai hO!lpedar WI ,6090 PATII " •• 100 rect.-d~vorcudo. ou' 6100 DATA u. eDtudante e. Bua cas •. 6110 DATA
6120 OIlTA V .. Iconted.ento ine_BPerado nf;l 6130 DATA verla 88/89 pode B19n.ticac 61(0 DATA uaa .ud.n~. para nova ~.S4. 6150 OAT ...
6160 DATA U. ro.ance na5cerl ec Sete.bro 6110 DATA d ... de que aua at.tude
6180 DATA Ind.pend""te quanto a :lor.a.r 1111 6190 DATil hr nlo eatraoue tudo.
6200 DATA El<1"t •• pOII"lbllldade d.e
6210 DATA caeeeent.e DU iD1clo de d9UlU. 6220 DATA rela<;~o per.anent" o.
6230 DATA Outubro.
6240 DATA 0 f.nal de •• '0 pode ser u.a 6250 DATA boa ~poca P". voce .udar de 6260 DATA "".preQo. lie aoha que "Alate" 6270 O ... TA .s .. a necellllidade.
6280 DATA voce pode achar qualquer troca 6290 DATA de ""prevo f I nancea r ... ente 6]00 DATA vantajo8a - "lit" pode mer 0 6110 DATA final de ue .. era.
6320 DATA E. Outubro/Nove.bro voce
6330 DATA "Bt.r~ .uito a,leQre 10 lIocUvel 634 0 DATA lIa" ell Oezellbro dc-ve to.ar cu~d.d
6050 DATA una ca.panhl .penes aoradavel 0
29 APLlCA~OES '9
6J,50 D~TA pal'"Ol nae lIer liui to .andao. 6360 DATA Na pri.lia'Vera vee! villi elltar 6370 DATA "eli !lqu. lUQar .ulto quente," 6380 DATA ~ V.I eetar e_ Duilo
6390 DATA ~o~ co.panhia.
I5-4CO DATA Voct pode ter II\!" c:ul.d .... de
6UQ DATA ,dqu'Aii aenbor a lc!o!la dB fa .. tlh. 4.20 DILTA II"" • ol;>o<;la,<;lIo pad" ee r .liv, .. da 6430 DATA em QUTubro e Novenbro.
0140 OAf A Ucc! val apr'ovel tA" llIU1 to e f>4.."iC OAT ... "N .. tal. iPa!l eUldd·do para nilo' 1>460 DATA qu!'obr.ar um br. .. co na9 te"tas. 6HO DATil
6480 DATA 88 60r. u~ an~ ma'9 de a~l~"dea 6490 QATA do ~Ue de caeom .. mor-oaos.
6~OO DATA" "
11510 I)"TA
-)20 DATA Um romance de ver~o pode ti~JO O.ATA "acO'ntecel" nea fo!.naa, mas' 6~411 DATA ,,,,bo·. 0" paree.ros n3,o
6550 DATA ~9tarlb a~a.xonada9.
oS6D DATA Fev~relro e Ahril serao mese9 6~IO PAT~ 9'Q~ltl~dntes ~ara ~UQ cArreIra 6580 [)ATA e vo<;l! pede r eceber ijlUmellto. 6~<;ID DATA
61)00 DATA li'~l~II"bl'o sera UIQ III :3 lilY' to 6610 DATA tr"n~ullQ ~lnanCel(amen~~. 6620 DATA Voct lias' aril b<!Btante ,,,,. 66]0 DII T/\ I" ae r •
66~O DATA ·E~ ~ete~hro, um OLftPuta no' b55C CAll>. lrahalho po~e c levar ~
666~ DATA 9reve ou de"tacar "ua
66111 n ... TA ~"I""!cl",~~ao.
6680 DATA Uma V,aOeE ao exterlor ~ 6690 OAT .... mUl~c ",.ov4v~1 no COD1e<;o 670D O~TA de Allo~to.
6710 !lATA
6710 DATA Em ]unho voc~ Qo.arQ ~
67JO D~TA companhla dc~ hOD1p.n~ da 674Q [lA fA fallI I 1<' e rei aJlar~ em caea . 67:>0 DATA
6700 PATA EEIl "\109tO' voce e st.ar a decoranclo 6170 [lATA " Jard~~ o~ comprando
6780 DATA an lould"des para sua ca~a. 6790 DATA
6800 1lII:[A !lll JW'lho voce pode 1 n H~i air u. 6810 DATA relaclonamento de pura atra~Ao 6820 O"TA ·{tslca: ~entlDentg de ~or sd' 68lQ D .... T ... depot!! de outubro.
6B40 DATA "Em outubro. vo~e pode~i" 6850 DATA ter ulla crJan<;a.
USO I:IATA
6870 DATA
6aSO DATA ·Noe ~rGJllmOIl treze ano~ ••
6890 OA.TA"vocl! lIer<IJ 'caP'" de .n!'tuenc~ar.· 6900 O"'TA "suu lI'lOnte. aa CiI.rrel .... a de" 6910 DATA .uitaa peasOas.
6920 DATA Julho ,e ",",oato, !leraO "e.nell :.Ulto 6910 OAf A •• ~~ .. tante8 para ~"aa tinan~a!l. 694,0 01>.TII Sua" aoQUl~ lc~e." em AQo~ to serlo 6950 DATA cO:lrpraa Lnteh()~nte".
6960 DATA vc,,~ d"'''1! tamar culdado CQIQ " 6970 DATA "Que fala @D Julho/AQoeto, pa~a· e980 DATA nlIo se lI"t,er 8111 ,,"p'u:roll.
6990 DATA " •
70110 DATA t 'prov,~ v el QUe. Bur j iI ul!la
'010 DATA Qrande viaQem nae ~lti .. as 7020 D1>.'TA duaa ~!!!lIj1Jna" de oe.ellbro e 7030 DATA no final do ano em qeral. 70'4.0 OAT"" E." 8et",.brg voc! tr.u·;j "lQu," 1050 DATA estranae1ro ou foraatelro
7 ()60 I)A"l'A par OJ eue ca!Sa.
7070 DATA
"l80 DATA VoC!! e!!tar~ muJ. to .. t i vo "''''' 70g0 DATA ·Sete~b .. o. e 8e dlvidlrdw
71010 01l1'A ent.r e !leu! camllrOllllll"oa "oC"'I!.~ 7110 DATA e 0" afaze"rea dOlllo!.Bt.~O".
11.20 Dill,TA voce val p,il!lSar a ",!.lor
71JO DATA -pa~te de ~eteabro ell caea," 1140 DATA "curtlndo ulIla pai",lo • ., vai· 7150 DATA cauaar entranb~za a mll1tos.
7160 DATA O'e hOlQ!n8 ... 3:0 ee ~·tntl r IIIUI to 717() D,o.:TII -r".&nUco" no co.,eco de Julho,· 7180 0",.", e aa ,"utheres durante Jun!>o " 7190 OAT" Julho.
7200 OATil lIoc!! vai "~8"ollr dl!' Karco a. MalO 7210 DATA 'pondo e.. ,crdell lruollll tlnaru;a,,;' 7220 O"TII vo<;! 8~ Bente oa~tando multo 7Z30 DATil I 1I,l>ul II iVllll!emte •
7240 D~TA Em deze~bro voce val COllecar
7250 DATA a 'trabcaHlar QU )l.u<far IIU," ce r r-e r ra 7260 DAtA par~ ~9uJa eolea gue the d~
7270 OA'I'II\ .alol'" llberd"de de cOlllffilcaclo. 7280 DATA o\"a .. ece .. 30 mUl taa O,pol"tunl.daCle8 7290 CAT ... "de via91!m em 1980. l!"pecl.~lm~nte
7300 DATA vlaOens a~reas.
7)10 DATA U.~ viaoe. 11ll!sperada pode 7]20 DIIY.J" "accnt ecer "m Dezellbr<J. e" 7.3.30 DATA durante e:.a~ vlaQem pod!! 1340 OATil "~r~tr um romllince.
7150 DATA
7360 DATA "II[ Jun,h<> voca p<>d .. 9'" enve l v .... 7370 OA.T,A e. tl!Ul""S dlaCUH.,II,,9 na faliLfllll< i' 390 DATA e.' tO~MI de UII 1Il,,~ro i doeo 7390 OA'I' .... 011 inv.tlldo.
7400 DAY A E. dQ09tO voce va~ oa9tar
74.10 DoIITA butane", dlnhelf'O eJD Hena de 7420 DAT'II lu,xo pa"~" ella ceB:a.
7430 DATil
7~40 DATil U .. ca~o ~ecreto qu., teve 74~O DATA seu mr ct o e Ill Janeiro 7<1150 DATA deve ac:abar em
1<170 O ... T,\ Fev" .. e rr e .
7'180 OATil U .. rOllla:n"o ~ode cOlle .... r no 7'190 OATO\ ·~"u trab .. lho e., ou.t ubr e , .,a9· 75~O CATA 0 parcelrQ Val aca.bat ~e
7510 0 .... 1,\ Il'lt""""!Ulndo por UlI.4 ~eg"o a [."He velha.
7~20 DAT'A DepOl., 15" fevereu"o, VOCe
7530 DATA val Be envolver com ~robl~a" 75(0 DATA leQal1!! que afetaD sua
7SS0 DATA carrelra
7560 DATA Pode ill>arecer Ull .. anho 7670 DATA ·" .. na e. JU.nho, Que" 7580 DATA v~ce dev" r"!nve~ttr, 7S90 DATA
7601J 'DATA "90eto " .. 1 aer UI!l !!tIIlO 761D D"1'A "1I1!1I para voce e. "asa, ,," 762a ~TA ... oce ~e ~nvolver~ em
7630 'DA'li'A aca r r ade ... debate .. politICOS, 764.(1 DATA Se voc!! 'val .se lIIudar e .. 19BI'!
COMO APER'FEICOAR 0 PROGRAMA
Embora seja muito divertioo. 0 programa de horoscope apresenta uma ssria cesvantaqem: nao renova as interpreta~Qes e previsdes, a nao ser por um scrtaio muito restrito. Assim. ele "perds a qraca" depois de uma ou duas consultas,
Se voce conheee um poueo de programacao BASIC. porern, oodera modllfiesr 0 programa e tornar seu interesse mats duradouro. Eis aqui algumas pratlcas suqestdes:
- aproveite a idela adotada em nosso programs original e aurnente 0 nurnero de alternatives de interpretal;Bo do horoscope para cada signa. Sa voce colocar oito au dez alternatlvas mais curtas para cada signo. e usar 0 gera,dar de numeros aleat6tios para eseoIher urna dalas. diminuiri3 a chance de que 0 programa se repita:
- al!~m do signo do zcdlaco lqus corresponde a constelacao 'Que esta no ponte rnais alto do ceu. no momento do nesclrnento), existe 0 signo ascendente (que e a constelacso que esta apcnrando no horizonte no momenta do nasclrnento}, lnclua-o no proqrarna, com 0 conjunto de interpretacdes COfrespondente;
- armazene os tsxtos de lnterpretaeao em urn arouivo de disco, separadarnente do programa. Oepois que 0 signo da pessoa foj determinado. 0 texto correspendente sera carreqado na memoria e mostrado no Video. Voce pndera, asslrn rnudar constantemente os textos, sem precisar alterar 0 programs propriamente dlto.
7fi50 DATA cO.nflldere: cUldadoBanente toda .. 7660 o,.,ri't 'as t"pl1cao;l)ea, eepeclalment .. • 76~O DATA duranle Abrll e A~O~'O
7660 DATA ~a9 dUdB ult.maa 3emanaS ae HdtO 7b90 DATA voc~ val fa~er pequenaa vlaq~n" 1700 OA.1'A par .. ;"'ll1.tar VeLh08 ~m'Q05.
7710 DATA
7720 DATA ["lste' d P0891bll.dade de U'lilol 7730 DATA VlaQe,m "m Julho !CG. dlQU~. que 7740 DATA nac nec:e!l8U'1 alll~nte aeu parcel ('0 7150 DATA
7760 !lATA Um a~o, de ver~o pode aC:d~d' 7710 DATA 9 .. vo~~ tornar-se mUlto
771;10 DATA PO"""9B1VO. Voc!! pod" "er
77110 O ... TA envQlvldo por al<;luil!'l0 i'l"ivoLo. 7800 DATA "Para a~ .ulhere". a dlIIlzade" 7810 DATA b~"eada na f'QUIa paterna pode 7820 I)A'I'A tornar-!U, mUllo ~rorl1l!lda.
7830 D"TA
IIIIIIII
111111-
111111
• RCTINA FINAL
• ORDEM DE CHAMADA
• RECOMPENSA, MORTE au VIDA
• cAMARA lENTA
• INTERRUPCAO
Na base da encosta. Willie perm.anece em compasso de espera. 0 csnario estacompleto - com pedras, buracos, cobras e mar .. Para que 0 jogo
comece. faltaso urn comando: "A~ao!"
ALe agora, voce digitou e testou separadamenteas varias retinas que compoem 0 videogame Avalanche. Neste artigo, forneeemos a retina final, que chama todas as outras na ordem certa e executa 0 jogo completo.
Depois de digirar e radar esra retina, comece a jogar. Certameme voce se sen[ira recompensado por todo 0 trabalho que teve,
Caso 0 peograma nao funcione adequadarnente, ccnfira-o com a listagern cornpleta e revisada (veja a proximo arligo desta serie).
1.50 REM dela dec a
160 REM JT" n:l:.dela
170 REM djn.z delb
180 R.EM Ie! a.254
190 REM l-n a ,.254-
200 REM bIt 0., a
210 laE:M jr nZ,alp
220 REM ret A retina a seguir e 0 laco principal
que cornpleta 0 jogo:
10 BEM oro 5,.8702
20 REM alp call 59153 30 REM call 58993
40 REM call 59823
50 REM call 58882
60 ~£M call 58795
70 REM call 58751
80 REM la a. (57336) 90 REM ep 1
100 REM JP z.59788 1]0 REM CD 2
120 BEM jp z.59652 1]0 REM dll Id b,SO 140 REM delb Id ~,255
Quando essa retina e 0 restante do programs. estiverem na memoria, comece ° jogo digitando a instrucao:
LET L=USR 58576
Como voce deve ter notado, ela chama 0 endereco do rotulo gbtn, que esta na origem da retina de inicializacao do jogo, no artigo da pagina 969.
OROEM DE CHAMADA
A retina principal chama, nest a or-
dem, a rotina de movimentacao de WU-
~ie, em 59153; a rotina das pedras, em 58993; a retina das c.obras, em 59823; a retina do mar, em 58882; a retina da nuvem, em 58795. e a retina da gaivoas, em 58751.
Em seguida, a retina verifica a chamada variavel da morte, Ela e iransfede 7336 para 0 acumulador e COIDparada com 1. Se este for a seu valor, a instrucao jr z manda 0 process ad or paa retina da recompensa, no endereco 788. Essa rotina incrementa 0 escore e coloca uma nova tela.
o conteudo do acumulador e entao mparado com 2. Se ele contern esse
/--
valor, 0 proeessador e mandado para a retina da morte, no endereco 59652. E·ta e a rotina que enterra Willie e encerfa a partida,
cAMARA LENTA
Se 0 processador fosse instruldo s6 para executar repetidamente a rotina final, a cada vez ele chamaria todas as outras retinas na memoria, e 0 jogo seria tao rapido que se tornaria irnpraticavel. Assim, para tornar 0 movimento mai lento, dois laces sao construldos, 0 que atrasa 0 processador em dois centesimo de segundo. Pode nao parecer muito, mas, considerando-se que a retina e chamada eguidamente, trata-se de urn ternpo significativo.
Be carregado com 50, e A, com 255.
A seguir, 0 conteudo de A e decrementado. A instrucao jr nz manda 0 processador para 0 laco dela 256 vezes, para que A seja decrernentado ate O.
A instrucao djnz decrementa 0 contendo do registro B e faz a processador voltar e carregar A com 255 de novo. Isso e feito ate que B acabe sendo reduzido a O. Portanto, 0 Iaco externo e executado cinquenta vezes, e 0 interne, 255 x 50 vezes.
o registro B contern a valor 50 apenas quando 0 jogo corneca. A. medida que Willie recupera seu Ianche, urn novo valor e colocado no endereco ocupado par 50 na instrucao Id b. Se voce voltar ao programa dos premios, vera que o valor nesse endereco e carregado em A. decrementadoe colocado de volta em B cada vez que Willie recupera urn item do seu lanche. Bssa operacao resulta, efetivarnente, em uma alteracao no programa - ou seja, uma rotina altera outra retina, Tal expediente s6 e recornendavel quando seus efeito forero totalmente controlados.
o processador e ecutara 0 taco de atraso uma vez menos, acelerando 0 jogo em cerca de 90 microssegundos.
FORA DO LACO
Como todo born programa, este tambern oferece ao usuario a alternativa de interromper a execucao, em ter que desligar 0 computador e perder tudo 0 que esta na memoria.
Neste porno do programa, precisa-
20 ALP ,LOA .5 )0 STA l8258 40 etR 18261 50 JSR EtB
60 aLP JSR HAN 70 JSR BAR
80 JSR BNK
90' JSR SEA
100 JSR MOVSUN 110 LOA 18252 120 CMPA II 130 LBEQ RWD 140 CMPA.2 150 LBEO DIE
mas verifiear se a tecla < BREAK> foi pressionada. Para isso, usamos 0 COmando in. Se <BREAK> nao foi pressionada, a lnstrucao jr OZ, alp faz 0 processador iniciar 0 laco principal Dutra vez. Se foi, 0 processador encontra a instrucao ret e volta para 0 BASIC.
o programs a seguir e 0 Iaco princ ipal que cornpleta 0 jogo.
10 ORG 20932
Carregue a parte ja digirada de A valanche e monte esse programa no topo.
10 ORG 19572
20 JHP ALP
30 ALP EQV S51C4
Teele a instrucao:
EXEC 19426
e 0 jogo ira cornecar!
Inll
PREPARANDO A ROTINA
A e' carregado com 5, valor armazenado em 18258, para ajusrar 0 atraso do sol. A posicao de memoria 18261, que contem a variavel do salto, e carregada com O. Gararrtimos, assirn, que Willie nao apareca saltando na tela.
o processador vai para a retina EL8 e define 0 bits necessaries para os nlveis superiore do jogo. Segue, entao, para a rot ina MAN, que cuida do movimento de Willie e, em seguida, salta para BAR, SNK,EA e MOVSUN - retinas que movimentam, respectivamente, a pedra, as cobras, 0 mar e 0 sol.
o ccnteudo da variavel morte, em 18252, e carregado no acumulador e cornparado com 1. Se seu valor for igual a I, Willie conquistou urn premia. LBEQ faz 0 processador executar urn longo desvio para a rotina que oferece a Willie sua recompensa.
Se a variavel morte nao for igual a 1, CMP A # 2 veri fica se seu valor e 2. A presence desse nurnero indica que Willie esta morto - 0 processador se desvia entao para a rotina DIE, que torna todas as providencias necessarias para os funerals.
ROTINA DE ATRASO
B e earregado com 100, funcionando como eontador para 0 maier laco de atraso. Note que a posicao de memoria ocupada por 100 quando 0 program a e montado - $51 EE - equivale ao byte decrementado na retina do escore.
A e apagado e decrernenrado, 0 que torna eu conteudo, 255 igual a -I na reo
presentacao binaria. A instrueao BNE verifiea se A chegou a 0; se ainda nao chegou, e novamente decrementado. Caso contrario, 0 processador sai fora desse laco. Em seguida, decrements B e salta para 0 laco interno, onde A e decrernentado. Isso e feito ate que B tenha chegado a O.
Em outras palavras: no inicio, 0 proce sador fica no laco 256 x 100 vezes, para tamar a execucao rnais lenta, Porem. quando Willie consegue uma recornpensa, 0 jogo se acelera, pois 0 processador fica nesse taco apenas 256 x 99 vezes, au 256 x 98 ou 256 x 97 e assim por diante,
FORA DO LACO
Para examiner 0 teclado, salramos para a sub-retina em 32774. Verificamo en tao se a tecla < BREAK> Ioi pressionada, comparando a valor reeebido no acumulador com 3.
Se a tecla nao foi pressionada, a ins-
IIIII1
trucao BNE volta para dar prosseguimenta ao jogo. Case contrado, 0 processador continua, encontra RTS e reLorna para 0 B)\SIC.
FECHE 0 CiRCULO
Acrescentamos urn ultimo detalhe ao programa, Na rotina que eleciona a tela apropriada e ajusta a escore havia, originalmente, urn RIS e duas instrucoes NOP. Elas faram usadas para reservar o espaco em que colocariamos uma instru~ao de salto, que iria funcionar quando a jogo Fosse executado pela primeira ves: Nao podiamos introduzir essa instrm;:aa ante de escrever a retina de acionamento. Agora que 0 programa e - ta pronto, mantamos urn JMP ALP naquele endereco. Com isto, fechamos 0 circulo, completando Avalanche, nosso videogame em Assembler.
------~
?
J
o programa a seguir e 0 laco principal que completa 0 jogo:
10 orQ 54101
20 )Q call 54603 30 call -11136 40 call 55564
50 call -11318 60 call -11266 70 call -11380 80 Id a. (-5201) 90 cp 1
100 jp z,55506
110 CP 2
120 jp z.55334
130 re b,SO
140 atr Id a,2SS
150 dl dec a
160 jr ns , dl
170 djnz atr
180 Id a,7
190 call 321 200 bit 4,01. 210 Jr nZ,jQ 220 ret
230 end
Quando essa retina e 0 restante do prograrna ja estiverern na memoria, de inlcio ao jogo executando 0 pequeno programa BASIC:
10 DEFlJSR= -11681
20 A=lJSR(O) 30 END
Como voce deve ter notado, esse prograrna chama 0 endereco iniciaJ da rotina que inicializa 0 jogo publicada no artigo da pagina 969.
ORDEM DE CHAMADA
o laco principal chama, nesta ordem, a retina de movimentacao de Willie, em 54603; a retina das pedras em -11 136; a retina das cobras, em 55564; a. retina do mar I em -11318; a retina da nuvern, em -11266, e a rotina das geivotas, em -11380.
PREMIO, MORTE au VIDA
Em seguida, a rotina veri fica a chamada variavel da rnorte, Ela e transferida de - 5201para 0 acumulador e comparada com 1. Se este for a lieu valor a instrucao jp z manda 0 processador para a rotina da recompensa, no endereco 55506. Essa retina aumenra as ponto de Willie e seleciona urn nivel maier de dificuldade.
o conteudo do acurnulador e comparado com 2. Se ele contem e se valor, o processador e mandado para a retina da motte, em 55334. Essa retina enterra Willie e encerra a partida.
CAMARA LENT A
Se instrulssemos 0 processador para executar centinuarnente esse laco, a cada volta ele cbamaria todas as retinas da memoria com crescente velocidade, tornando 0 jogo impraticavel. Para lornar a execut;iio mats lenta, montamos dais tacos de atraso, como ja fizemos na retina da morte.
B ecarregado com SO, e A, com 255.
A seguir, 0 conteudo de A e decrementado. A instrucao jr nz faz 0 processador continuar a decrementar A. no La';0 d1, ate que sell valor seia O.
A instrucao djnz decremenra 0 CODteudo do registro B e faz 0 processador voltar ao rotulo atr ecarregar A com 255 de novo. 1550 e feito ace' que B se reduza ill O. Portanto, 0 lace externo e executado cinqtienta vezes, eo laco interno, 255 x 50 vezes.
o registro B contern 0 valor ,50 so quando 0 jogo corneca. A rnedida que Willie recupera seu lanehe, urn novo valor e eolocado no endereco ecupado por .50 na instrucao Id b. Se voce voltar a rotina do escore, vera que 0 valor nesse eodereco (54J 33) e decrementado cada vez que Willie recupera ume parte de seu lanehe, Essa operacao resulta, efetivamente, em uma alteracao no proprio programa - au seja, urna retina altera outra retina. Esse expediente so e recomendavel quando 5eUS efeitos forem controlados.
Diminuindo 0 valor carregado em B, o processador executara 0 Iaco interne 256 vezes rnenos, acelerando 0 jogo,
",...
•
:: • - ~ •• ~ , - - - '1' • " - :.,.
~ ~. .'. I r.'\ .. ~ I ~ I I. ~ _ ~ : 'I
-
FORA DO LAva
Como todo born prograrna, este tambern oferece ao usuario a alternativa de interromper a execucao, sem ter que desligar 0 computador e perder tudo 0 que
esra na memoria. .
Neste porno do programa, precisamos ver se < STOP> foi pressionada. Essa operacao e identica a que executamos para ehecar se M ou N forampresslonadas na retina de movlmemacac de Willie.
o numero 7 e carregado :no HCUrnulader e a retina 321 da ROM e chamada, 0 nurnero em A corresponde a linha da matriz do teclado
na qual esta a tecta que desejamos verificar. Se alguma tecla dessa linha fai pressionada, a retina 321 coloca 0 valor 1 00 bit do acurnulador correspondente a ela.
A Insrrucao bit 4;a exarnina 0 bit 4 do acurn ulador, que corresponde it te-, cia < STOP>. Se eta nao foi presslonada, a instrucao jr DZ, jg faz 0 proeessador reiniciar 0 laco principal, jg. Caso contrario, D processador encontra a instrucao ret e volta para 0 BASlC.
OPmNl1O~ AlLOPRADO
Esta divertido jogo 6 um bom treino para os pintores "de fim de semana". Manejando 0 rotc, ales devem impedir Que a tinta escorra pela parade
e manche seu precioso carpets ...
Manchar 0 earpete de tinta c urn dos pesadelos dos pinto res dornesticos. Eis aqui uma boa oportunidade para que aprimorern sua teeniea de trabalho e deixem de fazer tanta sujeira e provocar tanta confusao na casa.
o objetivo do jogo e Impedir que a tinta, que escorre pela parede (a tela). chegue ate 0 chao (linha inferior da lela). Para isso, voce deve rnovirnentar urn rolo de pintura (urn sinal grafico horizontal. na tela). usando as reclas de controle do cursor.
VERSOES DO PROGFIAMA
o programa e apresentado em duas versoes: uma para os microcomputadores compativeis com a linha Sinclair Spectrum (TK-90X), e outra, para os da linha TRS-Color. Arnbas utilizam codigo de maquina, para que os calculos sejam efetuados com a rapidez necessaria,
Os programas em codigo de rnaquina estao inclutdos no program a em BA~ SIC. na forma de listagens numericas decimals. dentro de linhas DATA. 0 programa de carregarnento ve se os codigos foram digitados corretamenre, por meio de somas de veriflcacao (checksum). Apesar disso, convent gravar 0 programa em fita au diSCO antes de usa- 10, pais urn so codigo errado podera danificar a conteudo da memoria,
1 CLEA~ 28761' cosus 100
5 CLS . PAINT AT B.2;"DlCITE
NIIJEL DE DIFICULDADE"'TAB 8 :-<1> MUlTO FACIL"'TAB 8j"<2 > FACIL" 'TAB 8;H<3> NORMAL~' TAB 8;w<.~ DIFICILw'TAB 8j~ ~> IMPOSSIVEL"
CtS : LET aSs-ft: FOO nr1 TO 32: LET a~·aS+· ~: NEXT n
14 POKE 28953.0; FOR ne1 TO 4 ; PRINT PAPER liaS;: NEXT n 15 FOR Nm19 TO 21: PRINT PAPER 6;AT N,OjA$' NEXT N
16 PLOT 0.143: DRAW 255.0
20 RAND USi! 28672: RAND USR 28702
40 PRINT AT 12,7; FLASH 1:
PAPER 5; INK O;~ F I MOE
JOG 0 ~., FLASH OIAT 14,7 I PAPER 7; "PLACAR FINAL N;:
LET B$·R~: FDA N-28945 TO 28950: LET B$=BS+CHRS (PEEK N ): NEXT N: PRINT B$
45 FOR N-1 TO 500: NEXT N
$0 IF INKEY$-·~ THEN aOTO 50 60 RUN 5
100 LET L=500: ~ESTORE L: FOR N-28672 TO 28961 STEP 8
110 LET T~O' FOR 0-0 TO 7:
READ A' POKE N+D.A· LET T~T+A:
NEXT 0
120 READ A: IF A<>T THEN
PRINT -ERRO NOS DADOS DA LINHA
";L: STOP
130 LET t-L+IO: NEXT N: RETURN
SOD DATA 33,34,113,6.0.62,32. 119,399
510 DATA 35,16,252,33.128,]00, 3'l,32,630
520 DATA 113,33,48.48,34.17, 113,34.4040
530 DATA 19.113,34.21.113.201, 205.228.934
540 DATA 112,89.22,0.33.34,113 .25.4.28
550 DATA 126.60.254.156.200. 245.229.205,14]5
560 DATA 176.34.209.193.245. 126.254.255.1492
570 DATA 40,2.120.18.241.254.0 ,71,746
580 DATA 62.128.40.4,203.31.16 .252,736
590 DATA 70,116.119.58,25.113. 214,64.839
600 DATA 50.25,113.194,194,112 .237.15.1000
610 DATA 32.113.62,0.33,26.113 ,191.576
620 DATA 205,214.112.193.62. 223.219.254,14.82
630 DATA 245,203,31,203,31,48, 16,203,980
640 DATA 31.48.15.203,31.48,14 .203.593
650 DATA 31,48,13.241.195,156. 112.12.808
660 DATA 24.7.4.24,4.5.14.1.93 670 DATA 13,241.121,254.240.4.8 ,13.120,1050
~eo DATA 25 •• 150.48,8,254.32. 56.4.806
690 DATA 237.67,32.113.237,75. 32,113,906
700 DATA 197.3J,29.113.205,214 .112.19) .1096
710 DATA 121.230.248.79.89.22, 0.33,822
720 DATA 34.113.25.72.6.24,126 ,185,385
730 DATA 32.5.61,119.205.252. 112.35.921
740 DATA 16.244.42.23,113.45, 32,253,768
750 DATA 37.242,197,112.62.127 ,219,254.1250
760 DATA 201,31,218.30,ll2,201 ,229,120,1144
770 DATA 205,176.34.235.225.1. 3,0,879
780 DATA 237.176.235,201.42. 118,92.237.1338
790 DATA 91,120,92,25.237.90. 84.93,932
800 DATA 4].41.25.41.41.41.25. 34,289
810 DATA 118.92.76,201.211.245 .17,22,964.
820 DATA 113.26,60,254,S6.J2,6 .62,6J.l
830 DATA 48.18,27.24,244.18. 241,209.829
840 DATA 201.48.4B.4~.48.4a,48
.200.689
850 DATA 0.64.0.0.0.255.255. 2SS.829
860 DATA 128.100.36.36.37,37, 35.35,444
o jogador controla 0 rolo pOT meio das teclas Y. U, 1 e O. 0 programa em e6digo de maquina e responsavel pelo movnnento do rolo e dos pingos de tinta, aiem de cui dar do escore (numero de pontes marcados).
No programa em BASIC, a Iinha 1 reserva espaco para 0 programa em codigo de maquina, por intermedio do comando CLEAR, e chama a retina que comeca na linha 100. Esta Ie as c6digos numericos correspondentes ao programa em linguagem de maquina e os coloca na memoria reservada (usando comandos POKE, na linha 110).
SOMA DE VERIFICACAO
A soma de verificacao e armazenada na variavel T, que e cbecada a cada oito codigos pela Iinha 120 do programa. Essa linha informs se 0 valor da soma e igual ao prirneiro numero lido na linha DATA. Em caso afirmativo, 0 programa continua ate ler todos os e6digos, ~ue estao armazenados da linha 500 ill Imha 860.
As Iinhas 5 a 7 inicializam 0 nlvel de dificuldade - que pede ser facil, razoavelmente flieil, normal au dificil - e colocam 0 valor correspondente de atraso de tempo nas Iocacoes absolutas do programa em c6ciigo de maquina, par melo de comandos POKE.
As linhas 10 a 16 montarn a tela grafica e a 20 chama a retina em linguagem de maquina. As linhas 40 a 60 finalizam o jogo e imprimem 0 escore.
, -'. ~_';.".- .
I _ _ ~ _p _ ~ I
10 CLEAR 200.1S799:CLS
20 FOR K-O TO 13;T-O:FOR J-O TO
25:READ A:T-T+A
30 POKE 15800+K~26+J.A
• 0 NEXT:READ A:IF T<>A T~EN PRl NT~ERRO NOS DADOS DA LINHA-:I00 O+K~10:END ELSE NEXT
120 SC·O:CLS:FOR K-5 TO 0 STEP -1:SC-SC*256+PEEK(16173+K):NEXT 130 PRINf ea.-VOCE GANHOU";SC 1(0 PRINT @161.-QUALOUER TECLA PARA RECOMECA~-:AS~INKEYS
150 IF INKEYS··- TREN 150 ELSE 50
1000 DATA 127,63,33.127.63,37.7 9.95.253.63.(5.253.63.47,253.63 .49.1~2.19.14,191.63.51.15S.1B6 .48.2585
1010 DATA 137.1.0,191,63,41.48. 137.19.223,191.63.~3.204.0.128. 142.63.53.167.128.90.38.251.141 .29.2591
1020 DATA 182.63.37,176.63.36.1 83,63.37.38,243.141.119.23.0.14 5.190,63.34.48.31.38.252,125,63 ,33.24.26
1030 DATA 39.226.51.206.63.53.1 41.59.196.127.52.4.51.197.166.1 96.198.32.61.211.186.31.1.53.4. 3l.26~1
1040 DATA 152.8(.84.58.230.132. 38.1.57,132.3.64.139.3.198.3.74 .43.4.88.88.32.249.234.132.231, 2553
1050 DATA 132.108.196.166.196.1 29.168.]7.5.1]4,1.183.63 33.57. 190.63,38.79.95.179,63.38.36.2. 48.2439
1060 DATA 31.179.63.38.36.2.48. 31.195.255.254.36.2.48.1.52,16. 163.225.37.3.131.0,1.253.63.216 J
1070 DATA 38.57.134.247.127.63, 40.120.63.40.183.255,2.2~6.255. 0.193.247.38.3.124,63.40.26.1.7 3.2678
1080 DATA 129,127.34.233.57.190 .63.51.198.3.134,85,167.128,90. 38.251.190.63.51.116.63.40.36.1 0.31.2579
1090 DATA 16.203.3.196.31.39.2. 48.1,116.63.40,36.8,31.16.196.3 1.39.2,(8.31.116,63.40.36.1451
1100 DATA 8,188,63.43.34.3.48,1 36.32.116.63,40.36.14.188.63.41 .J7.9.48.136.224,52.16,141,13.1 792
1110 DATA 53.16.191,63.51.198.3 .111.128.90,38.251.57,31.16,142 .63.53,147.186.52.4,196.31.88.8 8.234.7
1120 DATA 48.133.53.4.88.73.88. 73.31.88.73.137.92.134.12.225.1 32.38.4.106.132,141.6,48,1.74.2 034
1130 DATA 38,243.57.52.22.142.6 3.45.198.6.26.1.166.1)2.137.0.1 67.128.90.38.247.53.150.1.3,0.2 205
::
o jogador controla a rolo de tinta pelas teclas de movimentacao do cursor (flechas). 0 programa em codigo de rnaquina e responsavel pelo movirnento do rolo e dos pingos de tinta, alem de cuidar do escore (numero de pontes marcades), Ele verifica se algurna das teclas de controle do cursor esta sendo pressionada e desloca 0 rolo de tinta na direcao indicada, Se 0 jogador consegue deslocar urn pingo de tinta, urn atraso de tempo e introduzido e 0 escore e aurnentado.
No prograrna em BASIC, a linha 10 reserva espaco para 0 programa em codigo de maquina atraves do cornando CLEAR. As linhas 20 a 40 leem os codigos numericos correspondentes ao programa em linguagern de maquina e os coloca na mem6ria reservada (usando comandos POKE. na linha 30).
A soma de verificacao e armazenada na variavel T, que e checada pela linha 40 do programa. Essa linha informa se o valor da soma e igual ao primeiro numero lido na linha DATA. Ern caso afirrnatlvo, 0 programa continua ate ler todos os codigos, que: estao armazcnados nas linhas 1000 a 1130.
NivEl DE DIFICUlDADE
A Iinhas SO a 80 inicializarn 0 mvel de dificuldade - que pode ser simples • medic, difkil e "imposslvel" - e colocam 0 valor correspondente de atraso de tempo nas locacoes absolutas do prograrna em c6digo de rnaquina, por meio de comandos POKE.
A linha 100 monta a tela grafica e a linha 110 chama a rotina em linguagem de maquina.
As 1inhas 120 a 150 finalizam 0 jogo e imprimern 0 escore, A seguir, 0 programa pergunta ao jogador se ele deseja participar de mars uma rod ada.
1IIIIIIIIIr
OIPIE~COIES COMDAlfAS
• •
CONVERSAO DO FORMATO COMPRESSAO DE DATAS
•
TESTE DE VALIDADE
•
DATA CORRIDA
•
INTERVALO ENTRE DATAS
A armazena!Q'em e a manipula<;ao de datas em BASIC apressntam problemas nem sempre 'faceis de resolver.
Com as raunas aqui fornecldas, vloea simplificara bastants seu trabalho.
Mais cedo ou mais tarde, 0 programador vai ter que trabalhar com calculos de datas. Como no BASIC nao h;i nenhuma funcao que facilite a realizaI;ao desses calculos, a tarefa podera envolver algumas complicacdes, devido a propria irregularidade do sistema de da(a~ao em uso - mese com numero diferente die dias, aDOS bissextos etc ..
Os principals problemas de calculo e rnanipulacao de datas, que surgem sobretudo em prograrnas para apUcacoes financeiras e/ou comercials, sao;
- representacso interna de datas na memoria do computador;
- checagem da validade de uma data;
- determinacao do dia da semana pa-
ra u:ma data e do numero de dias compreendido entre duas datas;
- calculo de data corrida a partir de certa data de calendario.
Mostraremos em INPUT alguns truques que simplifieam essas manipulacaes.
ARMAZENAGEM DE UMA DATA
Ha divers os tipos de notacao para datas. A mais cornum e a data gregoriana, au data de calendario, que tern a forma: dia/rnes/ano (DIM! A).
Essa data pede ser armazenada no micro de diferentes maneiras, A mais direta usa 0 [ormato de otto bytes:
DD/MM/AA
Em consequencia, deve ser arrnazenada em uma variavel literal (alfanumerica), e nao em uma variavel numerica, ocupandc, ao todo, oito bytes.
Podemos red uzir a espaco para a arrnazenagem suprimindo os sinais de separacao (barras ou pontes), ja que e possfvel inseri-los novamente no momenta de exibir au imprimir uma data. Ternes, entio. o formato de seis bytes:
DDMMAA
Armazenando as datas como sao vi-
ualizadas, e irnpossfvel ordena-las. Colocar urn conjuato die datas em ordem ascendente, por exemplo, resultara em uma enorrne confusio: uma data como 010187 vira antes de 011286.
Par essa razao, e preferiveJ usar 10 formate sueco, ja adotado universalmente em sistemas de computacao:
AAMMDD
No exernplo acima, 861201 aparecera, corretamente, antes de 870101.
Els aqui duas retinas para converter uma notacao em outra, A variavel NS representa urna data ern formate normal, de oito bytes; 1$, LIma data em formato invertido, de seis bytes.
Converssn de formato norma1 para formalo lnvertido:
1000' LlT IS ... NS (7 TO) +NS {4. T'O 5 )+NS(l TO 2)
1010 RETURN
Lembre-se de dimensionar N$(8) e 1$(6) no corneco do programa,
CODversiio de formato idvertido paril formato normal:
iiii~~~~
1100 NS~MIO$(IS,5)+R/"+HrO$(I$. 3.2) +" I"+MID$ (U .1. 2) :RETURN
55
1100 LET NS-I$(5 TO}+"'-+IS(3 TO 4)+n'-+IS(1 TO 2)
1110 RETURN
Sels bytes pod em significar multo espaco de memoria para cetus aplicacdes , par exernplo, para urn banco de dados, em que cada registro deve reservar espaco para uma ou mais data's.
Podemos reduzir ainda mais 0 espa-
co de memoria ocupado por uma dati! de calendario, mas isso envolve algumas manipulacoes que codificarn a data, irnpedindo sua exibleao imediata (sem a previa deccdlficacao).
Urn des formatos eodificados de datas e 0 formato de tr&' bytes:
CHRS(AA)oI-CHIlS(MM)+CHRS(DD)
A data sent armazenada em uma cadeia literal de tn!s bytes. DO formate sueCO; mas nao podera ser impressa ainda. Seguern-se duas retinas que realizam as conversoes. Nelas, DS e uma variavel literal com uma data em oito bytes. e C$, uma variavel com uma data em formato comprimido de tTes bytes.
1300 LET DS-STR$ CODE C${3 TO 3 )+STRS CODE CS(2 TO 2)+STR$ COD E csu TO 1)
1310 llETtmN
Essa lI!cnjca tern 56 uma desvantagem: na armazenagem de datas comprimidas em tres bytes em arquivos sequenciais (fita ou disco), a transmissao sera truncada sempre que surgir urn dia 13 (pais CHRS(13) e 0 codigo ASCU para lim de linha), Isto nao ocorrera com arquivos de acesso aleatoric,
ada impede que se armazene uma data de calendario em formato numerico - 0 que e ate desejavel em certas aplicacee . Porern sera desperdfcio de memoria, mesmo que usemos variaveis inteiras (que ocupam 6 dois bytes de espaco cada no TRS-80, TRS-Color, Apple, TK-2000 e MSX; 0 ZX-8l eo Spectrum nao oferecem essa possibilidade),
A annazenagem de uma data de calendario em tres variaveis Inteiras - par exemplo, D. MeA - ocupara oito bytes. Podemos armazena-las em urna variavel de precisao simples:
DT ~ A ~ 10000 + M ~ 100 + D
Veja 0 exemplos seguintes:
Data DT
01/0J/47 470.101 311l2l87 871.231
Note que DT naD pode ser uma variavel intelra, pois est a nao aceitaria os nurneros maiores. Assim, ficamos, de novo, com seis bytes por data.
VAliDADE DE UMA DATA
Urna boa pratica de programacao consi te em te tar a validade da data de calendario que foi entrada pelo teclado,checando eparadamente 0 dia, 0 mes eo ano.
Eis aqui wna retina simples para teste de uma data entrada no formato de oito bytes (variavel D$):
1500 E~O:M$=~J12931303130313130 ]13031 ~
1510 IF LEN(DS)<>B THEN E~l:RET URN
1520 M~VAL(MID$(O$.4.2») :IF 11<1 OR M>l.] TJlEN E-l:RETtlF.N
1530 D-Vl!.L (l'fIDS (0$. I, 2» : IF ncr OR O>VlI.L (MIDS (MS. (M-l) it2+1. 2) ) THEN 1590
)[550 RETURN
1500 LET MS=-l129J13031JOJIJ1JO 31JO]P
1505 LET £"'0
1510 IF LflJ(DS)OS TEEN OOTO 15 60
1520 LET M~VAL 0$(4 TO 5)
152.5 IF 11<1 OR 11>13 TREN' GOTe 1 560
1530 ['ET D"':V}\.L DS (1 TO 2)
1535 IF D<l OR O>VAL I1S((M-1)it2 +1 TO' (11-1)*2+2) THEN GO TO 1590 1550 RETURN
1590 LET £"1
1600 RETURN
Se a variavel E retornar igual a 0, a data e valida; se retornar lgual a l , houve erro de entrada.
A DATA COR RID A
Para muitas das tecnicas de calculode funcdes relacionadas a datas, e preciso saber 0 dia do ano de certa data de calendario. 1580 caracteriza a data corrida, cornposta do ano e do ilia do ano (um numero de 1 a 366). Por exernplo, a data corrida para 14 de maio de 1981 e 134181.
Esta sub-retina calcula a data corrida a partir de uma data de calendarto D$, em formate de oito bytes. 0 resultado sent armazenado em N.
1600 LET M$="0000]1059089120150 1812122422733033J4~
1605 LET D~VAl 09(1 TO 2) 1606 LET M=VAl 0$(4 TO 5) 1607 LET A=VAL 0$(7 TO 9)
1610 LET N=VAL M${(M-1)W3+1 TO (M-1)lI:3+3)+D
1520 IF M)2 AND (A. AND NOT-4) =0 TBEN LET N"'N+.l
1630 aE:TURN
A variavel M$, na linha 1600, contem omirnero do dia no ana equivalente ao prirneiro die de cada mes, rnenos J, para ano nao bissexto. As variaveis D, MeA ao extraldas da variavel DS que contern a data de calendarlo. Na Unha [610,0 numero de dias corre pondente a data O,M,A e' calculado somando-se D ao numero que e obtem extraindo-se de string M$ 0 valor para o primeiro dia do rnes M.
Finalrnente, a linha 1620 verifica se o me" e marco ou urn dos meses que 0 sucedem e se 0 ano e divisive. por 4 (ana bis extol. Nesse easo, aere centa-se 1 ao nurnero do dia, para cornpensar a Iato de fevereiro ter 29 dias. 0 emprego, poueo usual, da expressao logica AND NOT funciona como teste do resto da divlsao por 4.
A retina. so pode ser usada para os an os de .1901 a 19'99, pois Or calculo de anos bissextos nao Iunciona para secu-
los Impares - a nao ser que 0 ana em questao seja divislvel par 400.
DlAS ENTRE DUAS DATAS
o modo mais facil de determinar 0 nurnero de dias transcorridos entre duas datas de calendario consiste em calcular a data corrida de cada uma e obter a sua diferenca rom 1. A operacao funcion ani bern Sf as datas forem do mesrno ano; case comrario, dara resultados en-ados.
Par isso, devemos obter urn outro uumero (chamado data juliana), que leva em conta 0 total de dias entre uma data-base, fixa, e a data de calendario que especificamos. Para simplificar 0 calculo, rnultiplicamos 0 ano par 365, de forma que a data-base passa a ser 1900; depots, omamas 0 numero die dias referente aos arms bissextos entre J900 e a ano atual,
A proxima sub-retina calcula a diferenca entre duas daras, entre 1901 e 1999. Adicione-a it. sub-retina anterior, que comeca na Iinha 1600.
1716 LET N2=N+A""365+lNT (A-l}/4 1720 LET P~INT N2-Nl
1725 RETURN
A sub-retina aceita como argumentos duas datas, D1$ e D2$, no formate de oito bytes (DD/MMI AA), e rerorna a resultado armazenado emP.
Para testa-ta, acrescente as seguintes linhas:
1 o PRINT ., PRIME IRA DATA (OD/MMI AA) .. i
2.0 INPUT DIS
30 PRINT ~SECUNDA DATA (DD/MM/ AM "i
40 INPUT D2$ 50 casue 1700 60 PRINT P
70 GOSUiI 10
Use 0 programs para saber quanto dias voce viveu ate hoje!
30 APLlCA~OES 30
_I
FERRAME;NTAS
- - ---- - ---- - -- ... -- - - --
MAOS·ECTR
• COMANDOS EXTRAS
• RENUMERA~AO DE UNHAS
• AUiONUMERACAO DE LlNHAS
~."!_. __ __:E=L.:..:..::IM:..:..:,.:IN:.::...:_AQAO EM BLoeD
• OUTROS COMANDOS
Este conjunto de ferrarnent.as de pf'Dgfama~iio BASIC tamara seu trabalho mais fanil. Com ele, vloce tera acesso a diversos comandos inteiramente novas no Spectrum.
Embora todos os micros examinados em INPUT utilizem a mesma Iinguagem BASIC, voce ja deve ter percebido que ha diversas variantes, ou "dialetos' da mesma, De fate, ~ muito raroencontrar um programa, mesmo eurto, que possa ser executado sem modificaeoes em qualquer linha de computadores. Com freqii~ncia, rrata-se apenas de uma varial;8o na sintaxe dos com and os ou na maneira como eles sao usados; nesse caso, a adaptacao do programa nao envolve maiores eemolicaeoes. Algumas vezes, porem, constata-se que muitos dos eomandos destinados a urn cemputador simplesmente nao existem para outros, Ainda que eles nao sej am essenciais para a pIogramacao de muitas tarefas, nilo ha duvida de que, se fossem disponlveis, o trabalho do programador se tornaria bern mais facil. Incluem-se nessa categoria as comandos para renumeracao das linhas de urn programa (RENUM), para eliminacao de blocos de Iinhas (DEL) etc. Presentes em computadores de lmhas mais recentesvcemo 0 MSX, esses comandos fazem muita falta nos micros da Iinha Sinclair.
o programa apresentado oeste artigo adiciona varies coman.dos desse tipo ao interpretador dos microcomputadores cia Iinha Sinclair Spectrum, facilitando 0 desenvelvimenso de programas em BASIC. Os micros das linhas TRS·80, TRS-Color e MSX nao precisam de urn programa como este, pais ja. dispoem cia maioria dos comandos necessariosern seu interpretador BASIC.
O prcgrama foi desenvolvido em codigo de maqeina, de modo a coexistir, na mem6.ria,com a program a em BA· SIC e 0 interpretador.
gum erro na digitacao das linhas DATA,. que. contem 0 programa em ccdigo de maqulna, pois efetua automaticameme uma soma de verificacao. Corrija todos oserros, antes de armazenar 0 progra.rna em fita,
as codigos conjuntos do referenciadnr e do extensor de cornandos serao armazenados em fita sob a deaominaeao "TOOLKJT" CODE.
Para earregar 0 program a, digite:
Todas essas funcces sao chamadas per intermedic do comando RANDOMIZE usn. seguido de um numero, conferme rnostramos mais adiante,
Uma vez que urn novo comando tenha sido ativado, ele pedira diversos parametros - tais como os numeros das Iinhas a serem apagadas - atraves de mensagens exibidas na tela.
o programa utiliza dlversas retinas em. linguagem de maquina Iornecldas em artigo posterior (Rejerencia Cruzado). Assim, sera necessaria juntar os dois programas. As instmt;;oes para a execucao dessa tarefa estao contidas dentro do programs aqui apresentado. Bastara, portanto, digitatr 0 programa, aciona-lo com urn comando RUN e, entao, seguir a orlentaeao dada pelas mensagens exibidas na tela. 0 programs InIormara, tarnbem, se voce corneteu al-
CLEAR 63488
'.OAD "TOOLKIT" CODE
A rotina de renumeraeao de Iinhas e ativada pelo comando:
RANDOMIZE US.R 63,4:89
o programa pede que se informe 0 incremento de linhas a ser utilizado (urn numero entre Ie 255). Para achar 0 comprimento de um prograrna BASIC residente na mem6ria, use:
RANDOMIZE US.[{638,89
Para aehar 0' rnimero de bytes disponlveis na memoria, digite:
RANDOMIZE usa 6,3860
A numeracao automarlea de Iinhas (cemando AUTO" emoutros computadores) e ativada por:
RANDOMIZE USH 6415,4
30 APLICA~OES 3D
Bm seguidao programa pedirao mi· mere da Iinha inicial (entre 1 e 9900) e
o incremento (1 a 9900). Para cancelar
o comando, entre dais zeros quando 0 mimero de linha aparecer na tela. A rotina terminara com uma mensagem de erro, que devera ser ignorada.
Para apagar um conjunto de linhas de urn program a , digite:
RANDOHI.ZE usa 64000
o programa sol:idta que 0 usuario dlgite os nurneros de linha do inicio e do flm do bloco a. ser apagado. Para acionar 0 catalogador de fitas, charne:
RANDOMI:2;E USR 63919
A seguir, a borda da tela comecara a pis car . Posicione a. fita a catruogar no iafcio de tim prograrne e pressicnea tecla PLA \' do gravador. 0 programa exi-
bini fie tela informacces eontidas no cabecalbo do arquivo (header), Finalmente, para converter numeros decimals para hexadeeirnais, use:
RANDOMIZE USB 64394.
Para efetuar a conversao no sentido opostn, digite:
800 ClS ~ PRINT AT 5,.5;" COMPI I.ACAO CO.MPLETo\. "
610 PRINT AT 7,2.;.~PI:U';PME a CA SSETE PARA GRAVAR'"
820 PRINT AT 9,4; I~O NOME E TOO LIUT"" CODE"
830 SAVE RTOOLKIT~CODE 63489, 2000
COMUN1CA~Ao COM O'EXTERIOR
Para se comunicar com urn robd, as miaocomputadores pessoais geralmente tern pelo menos uma porta de entrada/salda (ElS), atraves da qual podem entrar em contato com dispositivns me" E:anicos, enemas. Existem dols tipos de porta E/S: as serials e as paralelas, Bias diferem entre si quanta a maneira de enviae e receber 0 fluxo de bits do periferico. Na maioria dos micros" a unidade basica de mteresmbio de informacao e o byte - um conjunto de oito bits, ou djgitos binarios. A informacao arrnazenada em urn byte e uma seqti@ntia de oito algarismos 0 ou 1 - por exemplo: 00101101.
Na memoria interna de trabalho do computador, dois bytes sao rotuladas especialmente para intercambio de dades com cada porta de entrada e saida, o primeiro byte, cbamado de Registro de Dire~io des Dados (Doto Direction Register, DDR), determina 0 status da porta, definindo quando 0 inrercamblc sera no sentido da entrada au no sentido de saida. Em geral, se urn bit no DDR river valor lgual a OJ a porta COIrespondente esta recebendo informacoes de fora; se for igual a I, ela esta transmitindo, Portanto, com 0 auxflio de urn comandoPOKE, em BASIC, podemos ajustar cada urn dos oito canals comandados pelo DOR, colocando urn mimero decimal entre 0 (todos OS canals recebendo) e 255 (rodos as canais transmitindo, au seja, DDR = 11 111111 em binario). Colocando 0 valor is, par exempto, teremos DDR = 000011 n ~ isto e, os quatro primeiro canals estao emitindo, e os quatro ultimos, recebendo. Oendereeo absolute do DOR, aser usado com 0 comando POKE, varia de computador para computador.
o segundo byte que controla a porta corresponde ao endereco da mesma, Urn dado colocado nesse byte e convertldo pela interface, conforme a aplicac·ao a que se destina, em uma serie de pulses de voltagem, qu.e sao entao pass ados para 0 dispositive. No sentido oposto, as voltagens emitidas pelo dispositivo periferico ,sao convertidas para bits pela in" terface, e coloca,das no byte de endereC'o da porta. Dessa forma, 0 proces,sador centr.u - e qualquer programa introduzido nele ~ tem faeil acessn a porta de entrada e saida, nao pIecisando se oeupar com as conversoes a serem rea~ lizadas.
A linguagem de maquina, como al~ gumas linguagens de alto, mvel, entre elas 0 BASIC, disp5e de instruc;oes, pa" ra escrever e ler num.a determinada por-
ta de safda, Bssas lnstrueces sao denominadas OUT e INP, respectivameate. Em BASIC, por exemplo, urn comando:
OUT .J2. 127
eoloca 0 mimero decimal 127 na porta de sa1da mimero 32. Normalmente, a maioria dos micros de oito bits ad mite ate 256 portas de E/S, numeradas de 0 a 255. Embora algumas delas estejam reservadas para perifericos jl! existentes, como 0 gravador eassete, as outras estao dlsponfveis para outros usoa.como o controle de urn robe.
o comando INP tom a mesma sintaxe e 6 usado para ler urn byte no endereco da porta. Em geral, 0 computador nia sabe quando este dado esta disponfvel, Assim, costuma-se usar um outre cornando em BASIC para testar a disponibilidade de urn novo dado: WAIT (nio confundir com 0 comando PAUSE dos micros da linha Sinclair).
Em uma porta paralela, es oito bits dlsponiveis no periferico OU byte' de eodereco da porta sao transmitidos, simultaneamente, par oito fios distintos. Na porta serial, a transmissao se realiza em lim bit de cada vez, em "fila indiana", po.r urn untco fio.
Quando chega a seu destine, no periferlco, 3,in[orma9ao e usada para CODtrolar varias operacoes, Em urn dispositivo eletromecanice, como urn robo, ela e utilizada para ligar e desligar mo[Ores, reles etc. Ap6s selecionar 0 endereco da porta de safda, 0 prcgramader pode enviar sinais para destinos espeeifieos, Par exemplo, se 0 valor e ajustado em 00110111, I1lD sinal e mandado para as destinacoeseorrespondentes, atraves do terceiro, quarto, sexto, setlmo e oitavo condutores de uma porta paralela, au, sequencialmente, par urn fio 56, de uma porta serial.
ROBOS PARA MICROCOMPUTADORi:S
Com 0 aumento do interesse pela rob6tica, surgiram nos Ultimos anos vanes tipos de robds baratos que podem ser controlados por urn. computador domestieo. As duas eategorias basicas de 1"0- bas d.esse tipo sao os bracos robotieos e os robBs m6veis (tartarugas 'e buggies), geralmente fornecidos em fonna de kits para montar. e com a software necessario para opera-los.
Os bracos rab6ticos procuram Unitar os movimentos do braeo humal!lo. Costumam ter cinco pontos de movimento, ou gralls de llberdade: ombro, catoveLo. pulso, garra (com ou sem rotac;ao ao redor do puIso) e base do bra(,:o (movi· mento basculante). Brayos robOticos po-
dern ter ate nove graus de liberdade, 0 nivel de sofisticacao do brace se reflete, e elaro em seu preeo final.
Os braces rnais baratos, como 0 Armatron, comercializado na Europa. nao sao prcgramavei», A desigll1u;:ii.o de robo nao se aplica a des, portanto - nao passam de urn brinquedo rnais elaborado. Outros, como a Armbot e 0 Armdroid 1, podem ser control ados per varios tipos de microcomputador. Tem cinco ou seis motores de passe variavel e eustam tanto quanta uma UCP de born preco. Seus movimentos, realizados urn par vez OU de modo continuo sao controlados de modo direto au por uma sequencia armazenada no micro. E passive! adicionar pausas, alterar ave" locidade do brace e editar as sequ@ncias armazenadas, para modificar ou acrescentar novas fases de movimento. 0 prograrna para controle do braeo pode ser escrito em Assembler au BASI C. corn chamadas as retinas em c6digo de maquina Que controlam as portas de E/8. Estas sao fornecidas pelo fabricante que tambem coloca it d:isposicao do usuario listagens-exemplo de' BASlC. com comentarios e expllcacoes,
Existem ainda braces roboricos que utilizam servomotores, em vez de moteres de passe. Urn servomotor possui urn sensor de posicao que verifica CODtinuamente se as posieoes determinadas por cemandos estao sendo aringidas, Circuitos lntegrados de preeo bastante acessivel (amplificadores lineares) permitem urn controle razoavel do peri ferico. Urn exemplo de braces desse tipo eo Beasty, comercializado na Inglaterra para os micros da linha BBC.
o Beasty tern diversos implemento uteis para 0 desenvolvimento de projetos de robotica aplicada, Uma camera miniarurizada, chamada Snap, permite que 0 micro "veja" e maya 0 brace. Esse dispositive contem urn circuito integrade senslvel a luz, que transrnite uma imagem digitalizada com uma resolucao de 128 x 25,6. Pesa menos que 45 g, mede 8 X 10 em. e e capaz de captar ate vinte Imagens per segundo, Varies programas interessantes sao fornecidos com o Snap. p05sibilltando, entre outras cGisas:
- exibir as imagens eaptadas no video do microcomputador. A imagem pode sex "fixada", como se fosse uma foto. aJ~ mazenada em disco au fita, Ie, posteriormente, reproduzida por meio de uma impressora gnificaf
- animar uma seqiiencia de imagens (vinte quaru:os),como se fo.sse urn fiJme ou desenho aoimado;
c comparar duas imagens tomadas em periodos distintos, Esse recurso tern. larga aplicacao, por exemplo, na monitorizacao de resideucias, edificios au 10- jas, no sentido de evitar a penetracao de estranhos. Se a imagem tiver se mcdificado alem de um limite prefixado, urn alarme pode er ativado, 0 programa mosrra urn grafico com 0 numero de mudancas, em funlVao do tempo;
• reconbecer cenas e objetos e movimentar 0 brace em funcao disso.
Muitas empresas que fabricam jogos mecanicos de armar, como Meccano e Lego, Iancaram kits com braces roboticos, que podem ser conectados a rnicrocomputadores baratos •. como 0 Sinclair Spectrum. Esses [ogos sao multo educativos - aprende-se muito sobre 0 funcionamento de urn robo, quando se tern a oportunidade de arrnar e programar urn sistema desde 0 inicio.
-
ROBOS MDVEIS
Ao contrario dos braces roboticos, de base estacionarra, alguns robes para microccmputadores, como as tartarugas e as buggies, movimentam-se sobre rodas. 0 primeiro robe desse tipo data des ano 40, quando 0 cientista britanico Ross Ashby desenvolveu uma tartaruga eletronica que tinha a tarefa de aehar uma tornada para alimentar suas baterias, 0 "bichinho", apesar de muito simples, exibia notaveis e surpreendentes padroes' 'comportamentals' , .
A primeira tartaruga para micros apareceu no Laborat6rio de Iatellgencia Artificial do MIT (Massachusetts institute oj Technology), nos Estados Unidos. Era 0 "filhote" da equipe do Prof. Seymour Papert, eriador da linguagem LOGO. Sua estrutura tambem e simples: eonsta de uma campiinula bernisferica de acrflico, montada sabre urna base move} com duas rodas independentes, aeionadas par motores controlados pete microcomputador. A 'cam_pinula pode ser acoplada a urn sensor de contato, que se comunica com 0 computador quando 0 robo colide com algum objeto au parede. Na "barriga" da tartaruga, urn solenoide controla urn porta-caneta, que levanta ou ahaixa sob controle do computador, Assim, a tartaruga po de ser "ensinada" 11 tracar desenhos sobre WIll papel colocado no chao.
A!. tartarugas tern sido multo utilizadas em escolas secundarias, para ensinar conceitos de pmgl"amac.iio a criancas menores. Empregando a Iinguagem
16 PERIFERICOS 16
H6 robos para micros no Brasill?
Os lei tares que se interessararn pe- 10 assunto com certeza ficarao trustrados com a resposta: atuelrnente nao M, no Brasil, rob&> cornerelais para conexeo a rnlcrocornputedores.
.A Universidade Estadual de Campinas (Unlcamp) construlu urna tsrtsruge semelhante a criada pelo MIT, para usa em seus projetos cam a lingl.lagem LOGO. Porem. essa tartaruga nao chegou a ser produzida industrlalrnente. Grupos de trabalho da Universidade de Sao Paulo (USP) e da Universidade Federal do Rio de Janeiro (UFRJ) desenvelvsrarn pretetipos de braces robettcos, como as. dsscritos no artiga. mas estes tambern nao sao camercializados ainda.
Para quem tem cendteees. rests a passibillidade de rnandar trazer do exterior urn des rnodelos de rob6 rnais conhecidos, como a Terrapin Turtle au a Valiant Turtle (tarraruqas), 0 Hero I (roba buggy de Zenith/Heathkit), Armbot, Armdroid ou Beast}! Ibracos rob6ticosl e kits dis Lego.
LOGO ou uma simplificacao da mesma (com comandos deuma tecla), a crianca aprende a programar a tartaruga para realizar movimentos eomplexcs. Urn des jogos preferidos consiste em dar cornandos pelo tecladc, ate que a tartaruga entre em sua "casinha", Os comandos em LOGO, digitados em urn microcomputador, sao traduzidos par uma interface de software para c6digos binarios de controle das portas de safda, Esses sinais sao enviados par urn "cordao umbilical" Iigado a tartaruga, au, nos rnodelos mals soflsucados. como a Valiant Turtle, por meio de sinais infravermelhos. Uma placa com circuitos eletronicos, na tartaruga, traduz os comandos binaries em acoes sobre as motores das rodas e da caneta. A tartaruga tern ainda urn olho luminoso, que acende quando ela Sf movimenta.
Os comandos do LOGO permitem a movimentacao da tartaruga segundo urn sistema geometrico, em Que a propria tartaruga e 0 ponte de referencia. Examinaremos esses comandos ern detalhe, na serie de artigos sabre novas linguagens. Adiantamos aqui, entretanto, as instrucoes mais tlpicas:
FDRW ARll ~ Move a tartaruga, em linha rera, para a frente.
BACK -Move a tanaruga, em linha reta, para tras.
RIGHT - Vira a tartaruga para 0 lado direitn,
LEFr - Vira a tartaruga para a lado esquerdo.
PENUP - Levanta a caneta, interrornpendo 0 desenho ..
PENDOWN - Abaixa a caneta, permitindo 0 desenho.
REPEAT - Repete uma sequencia de movimentos varias vezes.
TO ••• END - Armazena uma seqiiencia program ada de movimentos, que recebe urn nome (procedimento),
Para Cazer a rartaruga desenhar urn triangulo com lades de duzenros passos (unidades de deslocamento), as instruC'oes a serem dadas sao:
FORWAR.D 200 RIGHT 120 FORWARD 200 RIGHT 120 FORWARD 200 RIGUT 120
Poderiamos esc rever 0 mesmo com rnais econornia:
REPEAT 3 [FORWARD 200 RIGHT
1.20 JI .
Ou, ainda, armazenar as insrrucees na forma de urn procedimento denominado TRIANGULO:
TO TRIANOULO
REPEAT 3 (FORWARD 200 RIGHT 120 ]
END
lima vez definida, a palavra TRIANGULO passe. a fazer parte do vocabulario LOGO. Depois, para tracar a figura, basta digitar a comando TRIANGULD pelo teclado,
Pode-se utilizar urn mesmo procedimento dentro de outros, destinados a realizar movimentos mais complexos. Por exemplo, para fazer com que a tartaruga desenhe urna Oor fonnada de doze petalas triangulares iguals, digitamos o seguinte:
TO .FLOR
REPEAT l2 [TRIANGULO RIGHT 30] £ND
° LOGO e uma Iinguagem muito versatil, tambem empregada para fazer ealeulos maternatiees, manipular dados simb61icos como listas, palavras e names etc. Assodado a uma tartaruga, tern a poder de tamar muito divertido 0 aprendizado daprogramacao.
Prograrnas em outras linguagens, como 0 BASIC. tambem podem ser usados para controlar a tartaruga,
Exislem atualmente mais de duzentas linguagens de programar;ao.
Algumas del as premetem torner-se tao conhecitilas quanta 0 BASIC
no decorrer dos pr6ximos anos.
Ate agora, Iocalizamos em INPUT duas linguagens de programacao: Assembler e BASIC. Estas S30, de faro, as linguagens rnais difundidas entre as usuaries dos microcemputadores pessoais e domestieos existentes atualmente no mer ado bra Ileiro. Nao ao. porem, as umcas disponiveis.
Algumas linguagens vern se ternando gradativarnente mais conhecidas e utilizadas ern micro pes oais - em particular 0 LOGO. 0 PASCAL e 0 FORTH. Outras, criadas ja M algum tempo, mas destinadas a eomputadores de maier porte, prometem estender eu usa aos micros, podendo se tornar 0 futuro "esperanto " das rnaquina de menor porte. Entre elas, incluem-se 0 LI SP eo PR.OLOG. Entretanro, como as linguagens mais recenres ainda se encontram em processo de aceitacao e difusao. nem sempre estao disponiveis para os micros de -tocias as marcas.
. Na serie que se inieia com este arti- . go, apresemarernos duas linguagens de programacao cuja popularidade tern crescido dia a d ia entre 0 usuaries de micros: 0 LOGO e 0 PASCAL. Cada uma tern caracterlsticas que permitern sua aplicacao seja como Iinguagem geral de programacao (como 0 PASCAL). seja como linguagern destinada a areas espeeificas - a area educativa, por exemplo (como 0 LOGO).
Bxaminaremos aqui alguns aspectos do desenvolvimento de Iinguagens de programacao, a evolucao historica das linguagens existentes e os criterios usados em sua classificacao.
Ha atualffiente mais de duzentas linguagens de programacao catalogadas, A primeira vista, podemos ter a 'irnpressao de que Sf trata deuma enorme e bfblica "terre de Babel" _ No entanto, as linguagens de programacao, tal como as linguagens naturals, podern ser en quadradas em linhas evolutivas, ou jam11ias
de linguagens, Dentro de uma familia, as semelhancas sao maiores que' as direrencas, 0 que facilita muito a compreensao eo aprendizado das Iinguagens que a cornpoem.
NOVAS. LlNGUAGENS
Urn dos fatores condicionantes do aparecimento de novas linguagens de programacao e 0 progresso tecnologlco do hardware dos computadores - au seja, a disponibilidade de mem6rias centrais cada vez rnalores, 0 aurnento na velocldade do processador central (UCP), o custo rnais baixo das memorias auxiliares de disco, 0 aparecimento de redes de computadores etc.
Nos ultimos anos, as Iinguagens de alto nivel - que se parecem rnais com a Iinguagem natural humana do que com a binaria, entendida somente pelos cornputadores - sofreram grande evolueao. Avances tecnieos reeentes permitern que elas . ejam utillzadas como a linguagcrn nativa dos computadores, no IU5 gar da I inguagern de maquina. Com isso, a programacao se torna rnuite rnais ricH, podendo ser realizada, em rnuitos casos, pelos proprios usuaries.
No final da decada de 70. 0 Assembler e 0 BASIC cram praticarnente as unicasHnguagens para micros de custo mais baixo. pais 0 tarnanho das memoria ROM disponivei Iirnitavam multo a complexidade e a extensao do prograrna lnterpretador, que deveria ncar perrnanentemente na memoria da maquina.
Bntretaruo, a rnedida que 0 espaco para a memoria foi sendo ampliado, cresceu tarnbern a demanda por outros tipos de Iinguagem - 0 que era de se esperar, dado 0 numero cada vez: maior de usuaries e de possibilidades de aplicacao. Surgiram entao as primeiras irnplernentacoe pratlcas, em microcomputadores, de FORTH, PASCAL., LOGO. FORTRAN, PILOT. C. LISP', PROLOG, SMAL TALK e varias outras Iinguagens, Muitas delas 50 podiam er usadas, anteriormente, em computadores de grande porte.
Mesmo algumas linguagens de maier eomplexidade, que encontram aplica~aes em areas; comerciais ou cientfficas
• RAIZES DE UMA LlNGUAGEM
• EVOLUC.AO
• LlNGUAGENS IMPERATIVAS
• lINGUAGENS FUNCIONAIS
• QUARTA GERAC.AO
mais "pesadas". como 0 COBOL. APL, PL/l, SNOBOL, MODULA, ALGOL e ADA, j<i podem ser utilizadas em microeomputadores da faixa profissional.
Ao que tudo indica, a dif'usao dessas linguagens tende a creseer, conforme 0 usuaries Iorern se familiarizande com as suas vanragens. A expan ao na capaeidade e veloeidade dos micros fornecera as bases para esse avanco.
Outre f,enomeno registrado na mlcroinformatica e a multiplicacao de prograrnas que funcionam.ao mesmo tempo, como um aplieativo (bancos de dados planilhas eletrdnicas etc.) e como Iinguagem de programacao. Eo caso do dBASE II (banco de dados) e do FRED (planilha eletronica), entre outro .
o desenvolvimento de muitos desses novos aplica ti vos .. genericos' del! origem a linguagens altamen e especificas, usadas para. simulacao (DYNAMO, GPSS), controle de equipamentos indu ~ trials (PEARL), controle de interfaces e equipamentos musicals (AM PLE) etc.
o DESENVOLVIMENTO DE UN'GUAGENS
Nada impede que toda as Iinguagen de prcgramacao venham a ser desenvolvidas para. microcomputador . Mas parece pouco provavel que isso ocorra, visto 0 grande numero de linguagen existentes. Das mais de duzentas desenvolvidas ate agora, nao chegarn a vinle a que se tornaram conhecidas e uulizadas,
Como as Iinguagens natural ,a linguagens de prograraacao passarn POT continuo processo de transformacso, revisao e alteracao. 0 FORTRAN (FORmula TRANslation), par exemplo, evoluiu tanto a partir de. versao original, lancada em 1954, que, em alguns aspectos, e urna linguagem diversa,
Alem desse continuo aperfeicoamento, as Iinguagens tambem passam par urn processo de geracao de uma enorme quantidade de "dialetos" ou variantes, desenvolvidas para implementacao em linhas especificas de hardware, em diferentes sistemas e organizacoes.
U rna das limitacoes mais serias encontradas pelo usuario de micros e justamente a incompatibilidade entre diferentes dialetos do BASIC. Urn progra-
rna desenvolvido segundo 0 BASIC da linha Apple, por exemplo, em geral.nao po de ser executado em urn micro de outra linha, como 0 Spectrum ou a MSX.
Ape ar de to do 0 esforco despendido na elaboracao de urn padrao internacional, 0 ANSI BASIC, 0 problema ainda nao foi solucionado. A inadequa<rao desse padrao e evidente: tanto que nM M. uma unica marca de computador que 0 adote integralmente. Par isso, a interpretador BASIC, criado pela firma norte-americana Microsoft, tem sido usado como uma especie de pad rio par fabric antes de maquinas tao distintas como 0 Apple, 0 TRS-:80 e 0 MSX.
o projeto do MSX, alias, e fruto de uma das ultimas tentativas de se padrenizar bard ware e software de microcomputadores pessoals atraves da irnplementa~o de mais urn dialeto do BASIC Microsoft. Esse padrao tem tide excelente repercussao muncliaJ, principalmente no Japao (sell. pais de origem), na Europa, e no Brasil.
A historia das outras Iinguagens nao foi multo diferente: 0 sucesso de urn padrfio resultou sempre da conquista de uma boa fatia do mercado pela empresa que 10 desenvolveu. 0 FORTRAN pOI: exemplo, foi desenvolvido pela IBM e, como era distribufdo gratuitamente com os computadores dessa ernpresa, passou a ser amplamente adotado e seguido, inclusive par outros fabricantes. Contando com uma grande base de usuaries, a propria IBM pede realizar melhorias subseqtientes do FORTRAN ~ como 0 FORTRAN Il., 0 FORTRAN IV. as versoes G e H, 0 FORTRAN 77 etc.
Entretanto, lima linguagem como 0 PASCAL, que talvez seja a segunda linguagem rnais popular para micros, pessui pelo men os sete versoes diferentes, Cada uma delas e urn semipadrilo para o PASCAL relativo ao sistema operadonal soh 0 qual roda.
AS RAizES DA L1NGUAGEM
A terre de Babel e uma consequencia inevitavel da necessidade de desenvolvimento de novas Iinguagens,
Yolremos ao exemplo do FOR· TRAN. Seguramente, foi a primeira linguagem de alto nfvel desenvolvida. Sua criacao atendeu a duas exigencias: a resolucao de formulas matematicas e cient{ficas, e 0 uso eficiente dos recmsos computacionais dJsponiveis. Nesses aspectos" roi urn 5Ucesso. Mas. em dois outraN pontos., que DaO tinbam side juJgada!! importantes pelos projetistas do FORTRAN, a linguagem mostrou-se deficiente. Ea e cxcelente para fins ma-
1 LINGUA GENS ,
tematicos e cientificos, mas extremamente inadequada (OU mesmo lmitil) para tarefas como processamento de textos ou banccs de dados, Alem dis so , nao e urna linguagem estruturada, 0 que restringe a aciia do programador.
Na decada de 50, desenvolveu-se uma outra linguagem, 0 ALGOL 60, com uma filosofla distinta de projeto. Seus pontos traces e fortes diferem bast ante daqueles que caracterizarn 0 FORTRAN - sobretudo par se tratar da primeira linguagem de programacao estruturada. Ela roi projetada para ser essencialmente algoritmica (dai seu nome, ALGOrithmic Language), ou seja, para corresponder nao as formulas matematicas, mas ao processo inerente usado na reo solucao de urn problema (algoritmo). A unidade bdsica do ALGOL e 0 procedimemo, urn bloco autonorno de ecdlgo, com uma tarefa claramente definida, que trabalha com ripos predefinidos de variaveis (declaror:oes). Por essa razao, todas as Ilnguagens derivadas diretamente do Al:GO!.., como o PASCAL, o MODULA~2 e 0 ADA, sao classificadas como procedimentais, declarativas, algodtmieas e estruturadas.
Embora naa tenha sido multo usado, a ALGOL 60 desempenhou urn papel de de staque , gerando urn. grande mimero de Iinguagens, H. 0 COBOL, considerado 0 terceiro "avo" da computacao, foi intensamente utilizado - mas so deixou urn "descendente", 0 PL/l.
o COBOL (Common Business - Oriented Languag,e) surgiu como resposta a conclusao - enunciada pelo Ministerio da Defesa dos Estados Unidos - de que as instalacoes militares e centres de pesquisa neeessitavam de uma linguagem de programacao comum, se quisessem operar 0 sistema americana de defesa como urn todo, efetivamente. Desenvotvida a partir de urn esquema de ceoperacao entre governo e industria, essa linguagern difundiu-se rapida e amplamente. B provavel que seja, boje, a linguagem mais utilizada para apUca~oes comerciais em computadores de grande porte. Uma das razoes que explicam a grande aceitacao do COBOL e sua proximidade do ingies natural.
EVOLUI;:AO
As linguagens de alto nlvel anteriormente mendonadas derarn origem a grande maioria das linguagen.s de programa<;ao da decada de 60, multas das quais ainda em usa. 0 BASIC, por exemplo, e urn descendente direto do FORTRAN. As diferencas entre ambos refletem 0 intuito de se chegar a uma Un-
guagem de flieil uso pelos inieiantes em programacao. 0 ALGOL 60 deu origem ao ALGOL 68 - tao diferente, que pade ser considerado uma nova linguagern, apesar do mesmo nome -, bern como ac PASCAL e ao STMULA. De uma combinacao entre 0 ALGOL e 0 CO· BOL surglu 0 PL/I. Do PASCAL e do SIMULA nasceu urn grupo de linguagens procedimentais e algoritmicas, que incluem 0 MODULA. 0 MESA, 0 EUCLID e 0 ADA. Finalmente, uma linguagem bastante poderosa, voltada a programacao de objetos, originou-se do SIMULA - 0 SMALLTALK.
LINGUAGENS IMPERATIIVAS
Todas as linguagens citadas 310 classiflcadas como imperatives, pais operam atraves de uma sequencia de comandos declarativos - isto e. comandos que determinam urn tipo altamente especiflco de a~ao so bre dados da memoria, rotulados na forma de variaveis, Muitas pessoas estao tao aco tumadas a essa forma de programacao, que irnaginam tratar-se da unica possivel. Entretanto, outras famflias, que incluem linguagens como o FORTH. 0 LISP e o LOGO I tern est ruturas de dados e de processamento basrante diferentes, Elas constituern 0 grupo de lingua-gens chamadas funcionals au aplicativas, operan do basicarnente at raves da aplicacao recurslva de funcoes,
lINGUAGENS FUNCIONAIS
As linguagens funcionais, como 0 proprio nome sugere atuam sobre os dados por meio de tuncdes ou procedimentes. Urn. procedimento e alga bern mais poderoso do que urn comando. Vejarnos por que: toda linguagem de prograrnacao tern urn vocabulario fixe de instrucoes, chamado conjunto de instrut:oes. As linguagens imperatives utilizam urn conjunto fixo de instrueoes, Oll eja, urn ccnjunto que nao pede ser ampliado pelo proprio usuario. A linguagem funcional, ao contrario, nao faz distincao entre os comandos, declara<;6es ou funcoes pertencentes ao con junto original e as funcces ou procedimentos criados pelo usuario. Par isso dizse que certas classes de linguagcIIs funcionais sao exlens(veis.
o processamento baseado em funcoes apresenta ainda antra valltagem: ela age sabre parametros de entrada e devolve parametros de salda, sem "saber" necessariamente 0 que des representam. lsso justifica a classifica<;:ao das funyoes como generaliztiveis.
ru hnguagens funcionais podem ser divididas em modules (blocos autonornos de processamento) mais facilmente do que as imperativas, e possuern uma estrutura Inrema hierarqulca que e usada tanto para 0 armazenamento do programa quanta dos dados, No :lISP ou no LOGO, par exemplo, uma lista deflnida como uma estrutura de dados pode ser US ada paraarmazenar urn prograrna. Existem cornandos para rnodificar e executar urn programa, armazenado em uma lista (EXECUTE. em LOGO. e EV AL. em lLISP). Essa propriedade de uma linguageme chamada indireciio.
Jaem uma Iinguagem imperativa, como 0 BASIC, programa e dlados sao elementos inteiramente distintos .. 0 conjunto de instrucoes nao po de serampliado e a ordem de execucao e rnuito importante: se ela sofrer alguma modificacao, determinados valores de memoria nao serao criados ou atualizados,
Linguagens como 0 LISP permitem uma abordagem hem diferente. Em am cerro sentido, cada programa em LISP - au nas linguagens que dele derivam
- e uma exrensao da Iinguagem origi-
nal. com 0 acrescimo das novas funeoes definidas pelo usuario, Com uma linguagem funcional, 0 programador tern maier controle sobre 0 que Iaz do que com uma linguagem imperativa.
As tres propriedades mencionadas ~ recursae, extensibilidade e indirecao - sao fundamentais em urn campo rnuito atual das ciencias da computacae: a Lnteligencla Artificial (" raelocinic' e "aprendizado" par maquina), LISP e LOGO, alias, Coram criados especificamente para facilitar 0 processamento simbolicc, nao-numerico, caracterlstico das aplical;oes de Inteligencia Artificial. Ambos naseeram no Laboratorio die Inteligencia Art] ficial do MIT (Massachusetts Institute of Technology, nos EUA).
EXTENSOES
Como ja dissemos, as Jinguagens de computador, da mesma forma que as linguagens naturals, nao permanecern estat1cas :elasevoluem constantemente. absorvendo aspectos de outras Ungua.gens .. Com iSSQ" as diferew;;:as entre linguagens imperativ9.5 e linguagens fun~ clonais tendem a diminuir.
Tome:mos como exemplo 0 BASIC: os dialetos mais difundidos do Microsoft BASIC (para as Iinhas Apple, TRS-80. TRS-Color e MSX) saO linguagens puramente imperativas. Sells descendrentes mais modemos, porem, como o QuickBASIC (da pr6pda Micros.oft), possuem caracteristicas runcioaais, entre elas a programacao estruturada.
cambio de "mensagens' entre obietos. Como nag existe outre tipo de processamento, qualquer aCaD em um prograrna ~ sempre a mesma coisa: uma mensagem envlada para um objeto, que, por sua vez, envia mensagens para outros objetos.
Os objetos podern realizar processamentes internes ,conforme a mensagem que recebem. Urn obieto do Small'Falk e, assim, semelhante a uma fuacao LISP ou a urn prccedimento PASCAL. 86 que, em vez de construir procedimentos e incorpora-los a uma estrutura em arvore, como no LISP e LOGO, as objetos podem ser considerados entidades independentes - como os registros de uma base de dados, em que eada registro interroga ou responde aos demais, Em outras palavras, urn objeto pode center tanto. dados quanto programas.
A ideia naa e rnuito facil de' eatender, a DaD ser que se observe 0 funcionamento do sistema. Infelizmente, ainda nao se encontram implementaeces de Srnall'I'alk para todos os micros. Mas certamente vale a pena investigaressa linguagem.jaois e1a represenra uma teodencla iraportante para 0. futuro. Sistemas operaeionais de micros modernos, como 0 Macintosh, da Apple, foram rnuitn influenciados pela filcsofia SmaUTalk, inclusive quanta ao tratamemo da interface com a usuario, que e feita atraves de "[anelas" mliltiplas, menus e acionamento do .. mouse" .
, LINGUA GENS
UNGUAGIENS DE aUARTA GeRA~AO
Certas linguagens apfieativas mais recentes (de quarta geracao) foram desenvolvidas a fim de dotar Q prcgramador de pederosissimos recursos, denominados macros. Com efeito, nessas linguagens,.urn unieo eomando au funcao equivale .a centenas au milhares de instrucoes de uma linguagem imperativa comum, como a BASIC. Umexempln de Iinguagem de quartageracao para mieros, 0 dBASE II (e sua extensao para micros de dezesseis bits, 0 dBASE ill), e, ao mesmo tempo. urn sistema apllcativo - maiseepecifieamente, urn s.i.ste~ rna gerenCiador de bases de dados, ou SOBD - e uma linguagem de programa~ao.
Dutra linguagem de quarta gera(,:io em franca ascensaoe 0 PROLOG (PROgramming in LOGic), desenvolvido na Fra:n~ e adotado pelos japollcsea em seu programa de computadore,s de quinta geracao. 0 PROLOGesta. para 0 campo da Inteligencia Artificial como 0 dBASE para a area de .gerendamento de dadas. Exlstem PROLOG para micros de oita e dez.es.seis bits.
Urn processo semelhante oeorreu com 0 BASIC original das Iinhas Sin" clair. 0 SillperBAS1C do modelo QL Spectrum, que dele deriva, tern nao so estruturas - como CASE SELECT - proprias do PASCAL, como tarnbem oterece a possibilidade de se ehamar fUD~aeS apenas pelo nome e de se utilizar a recursao. Desenvolvimentos fu turos da linguagem BASIC provavelmente a afastarao ainda mais do padrao original (ANS1), ineorporando elementos de lin guage ns funcionais como 0 FORTH e 0 LISP.
Como ja vim as, 0 LiSP foi desenvolvi do como uma linguagem para 0 campo de Inteligencia Artificial, e, ainda hoje, predomina neSS3 area. Uma de suas prineipais earacteriaticas e 0 intense uso de cadeias de caracieres (string). Outra Iinguagem util na mesma area e 0 SNOBOL (StriNg Oriented SjmBOlic banguage), originalmente desenvolvida para 0 processamento de linguagem natural em [nteligencia Artificial, Lingulstica etc., em tarefas como a determinacao da autoria de manuscritos, analise estilfstica de textos literarios e geJfa~ao automatica de poemas,
Tambem rnerece destaque a reeente evolucao das linguagens de desenvotvimenta de sistemas. Sao Iinguagens de alto nivel, mas que incorpcram recursos avancados de trabalho direte com a memoria, processador e periferieos do computador. Entre as linguagens desse tipo, a demaior sucesso e 0 C. que foi usada para desenvolver a sistema operacional UNIX. Ela POS!lW urn poderoso cenjunro de ferramentas de desenvolvimento de software e tern sido utHlzada sobretudo por programadores mais experientes, Para 0 usuario comum, 0 C par-ere urn tanto inacessfvel - esta entre uma Ilnguagem de alto nivel, como o !PASCAL, e tim Assembler, bern mais flexfvel, mas diffcil de usar. Mesmo assim, essa linguagern vern se difundindn, principalrnente entre os amadores que desejam dorninar sua maquina sem ter o trabalho de aprender Assembler. Existern diversas implerneataeces do C para micros, inclusive 0 Spectrum.
o SmallTalk e outra limguagem que segue de peLlo a mosQ'fia do LISP. Tipica de urna nova familia, a das linguagens de programa~iio de o bjetos , ela constitui urn "ambiente" completo de programa~ao ,como 0 C, e nia apenas uma Jinguasem. 0 SmallTalk tern, no entanto., div,ersos recursos volt ados para a mtxima simpHfica~ao do conceito de programa e da tarefa de programa~ao. Nessa ling:uagem,. eada i,tem de urn program a e considerado um objeto.. A Drograma~ao e feita at raves do inter-
PL
o juga ja fortodo digrtado. Willie esta pronto para escalar a montanhrs. entrentar 0 mar,
as psdras as cobras e os buracos. Sera que 0 programa vai funcionar?
A vaitmche agora esta complete, mas pode precisar de alguns acertos, E pouco provavel que voce tenha digHado urn programa mo longo sem cometer alguns enganos. Dedique-se a resolucao de eventuais problemas causados ao eriar ou copiar erres, Para descobri-los, verifique suas Iistagens Assembly; se achar conveniente, remonte-as,
Depois que as retinas separadas estiverem funcionando, carregue-as na memoria, salve-as numa fila e teste 0 conjunto complete chamando-o com 0 comando de execu9io de codigo de maqui.na de seu rnicrocomputador.
Por sua estrutura modular, 0 prograrna do videogame A valanche e facil de corrigir, Caso encontre algum problema durante a execucao do jogo, tenha 01 cuidado de identiflcar a parte que apresent01!1 0 defeito e concentre nela seus esforces par-a descobrir 0 erro,
Mesmo que todas as retinas funcionem adequadamente quando rodadas umaa UIDa, e po slvel que 0 programa complete apresente Ialhas, Retinas ehamam outras retinas - e se uma delas eontiver algum tipo de erro ou estiver montada em Iugar inadequado, 0 programa pod era nao funcionar. Esramos, por isso, pu blicando lima listagem hexadecimal complera do jogo .. Utilize-a para checar sua versao final.
Depois de montar A valanche, 0 programa estara na memoria do computador como uma serie de numeros hexadecimais em posj'yoes sucessivas, tal qual mostramos neste artigo. 0 mrmero de
. quatro digitos na coluna esquerda COfresponde ao endereco da posi~ao de memoria ocupado pelos dais primeiros bytes de programa naquela linha. Os pares subaequentes de dlgitos ocupam as posicoes seguintes. Vocetem, pcrtanto, a possibilidade de examinar cada byte de Avalanche atraves do conteiido da posi~ao de memoria correspondente e verificar se cada instrucac do jogo foi montada eorreramente
Ao contrario de alguns outros jogos de computador, Avalanche nunca chega a entediar, pais seus parametros de execucao podem ser alterados, A constm~o modular do programa deixa 0
usuario livre para fazer as medificacdes que quiser, perrnitiado-lhe adaptar Ava-
ianche as suas preferencias pessoais, Seja curioso. Experimente. Afinal, 0 ;0- go agora e seu, E voce pede fazer dele. o que bern entender.
o jogo esta escrito na regiao 50000 da mem6ria par~ CJ..ue possa ser mentado pelo Assembler de INPUT,
Se voce nao esta usando 0 Assembler de INPUT, talvez precise deslocar 0 jogo na memoria por causa do espace ocu pado pelo proprto Assembler, Amelhor altemativa e a regiiio 20000. Para fazer a transfereneia basta mudar para 2 os enderecos Que inielam cam 5.
Lernbre-se de verificar se a rotina que executa a rmisica na~ apagou outras 1'0- tinas ao ser deslocada.
Use 0 moulter de c6digo de rnaqui.na para analisar a memoria do seu micro ever se ela confere corn a listagem em hexa dada a seguir. Se vocetiver deslocado 0 jogo, as posi~oes de memoria serao diferentes, mas a sequencia de codigos hexa deve ser a mesma,
DEA8 18 3C 3C 18 3C 30 30 3C DEBD 3C 3C 18 18 18 18 18 IE DEB8 01 03 03 01 00 01 01 01 DECO 80 CO 60 80 00 00 00 EO OEca DE 00 01 02 04 08 04 00 DEDO 00 00 80 40 20 20 30 00 DED8 00 00 00 00 18 3C 30 18 DEEO 00 10 10 IE EO 00 DC 24 DEEe 42 82 43 00 00 00 00 00 DEFO 00 00 00 00 01 03 03 01 DEFB 00 00 00 00 80 CO CO 80 DFOO 00 01 01 01 DE 00 01 02 DF08 00 00 00 EO 00 00 eo 40 DFIO 04 08 04 00 00 00 00 00 DF1a 20 20 30 00 00 00 00 00 DF20 1C 3E 7F FF FF FE FC 39 DF28 03 07 OF OF OF 07 03 01 DF30 80 CO EO FO .FO Fa EQ co DF38 00 00 07 18 20 40 40 80 DF40 00 00 1F AD CO 00 00 00 OF48 00 00 80 40 5C 22 02 02 DF50 90 40 7C 02 02 01 00 00 orss 00 00 00 04 OA 11 60 00 DF60 02 04 08 04 04 04 F8 00 DF6B 00 00 78 86 01 01 00 00 DF70 00 DO 1E 61 90 80 00 00 DF7S 00 00 00 00 87 79 00 00 DF80 00 00 00 00 61 9E 00 00 IJF813 2.2 14 OB 08 08 08 09 08 DF90 18 3C 36 3E 7E 30 19 18
• COMO DESCOBHIR DA VERSAO FINAL
as EAROS • o CODIGO HEXADECIMAL
TESTE 0 AL TERA~O[S POSSIVEIS
CONJUNTO COMPLETO • DESLOCAMENTO DO JOGO
• VERIIFICACAO NA MEMORIA