Você está na página 1de 311

[i]~CNITA

NCWA CUUUAIIL Pl'esIdetI'e



F!.Witl BaJros PInto

RlIDAcAo

Dire'Of Editorial: Carma ClIagas Edllom~

Antonio Jose Filoo, &ria ~mrk AmM Editmr Chcre FIlulQ de Almelda

EdiIQrM AMistenlelJ: All Llicia R de WceM, Mari5II Soare$ de Andrade

CIIere de Arte: Carlos ,Uuil Batista

~Ies de Arte: Ilagn:Y!r B.o1.lIos;5ampa1O, Grare Alar® ~ Monica illnaJOOn Corradi

CoIallomdO're8

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

Dln!toria: F'lavi(J Barros Pinto, Jaao Gomez, Menahen \1. PpcIiLi, Rem1 C. X. Santos, Stelill AJ~ C~mf,IQ5

slUMAmo

A'LlCA~"E5

TRS-Co(or: urn. editor de discos 1216 Programa para teste do video 1251 Consulta aos astros 1261

Ferrarnentas para 0 Spectrum 1281 Deseahe arquitetCinko (11 1367 Desenh,o a[quit~t.ooico (2· 1386

Urn editor musical III 1 98 Umeditor mus" ical ,2. 1408

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

30 DATA. 160,O •. 174,lJ3.3,238.4. 6,192,136,208.5,206,132,3,240,6 , 20.2 , 208 • 2(.5. 76 , 34 .• 3 • 96

4.0 READ D

50 IF D - 255 'HEN 10

60 POKE 900,T: POKE 901,0: CAL L BOO

70 COT'O 40

100 0"".11. 47,47,4.0,37,31,31,28 ,31

110 DA.TA 47,23,26.28,31.35,,37 ,4.2

120 DATA 47 •. 47.40,37,31,Jl.28 ,31

130 DATA 47 j 23.26. Z8. 31,. 35,37 ,42

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

120 DATA 24,2.2.21.19.17 .16,. H., 255

130 DATA 17,17,20.21.24.,24.26. 24.17,255

140 DATA 19.19.23.24.26,26.24. 23,255

ISO DATA 17,17,20,21,24,24.,20. 21,255

1 SOUND ',S6:S0UND B,15 2 90UND 1,0

10 C-O:T-120

20 REST,ORE

27 F092·1TOC+l:READP:NE~T 28 IFP ... OTHENIO

2'9 RESTOB E ! FO,RW-1 TO·P : RBADWW : HEx T

30 READK:IFR-255TH~NC-C+1:COT02 o

50 SOUND O,K

6'0 FORZ-ITOT : NEXT 70 GOT030

100 DATA 13, 23 .13. :23 , .31 , :23 , 13 , 2 3,41,50,13.23,0

110 DATA 213.213 ,.179.169.14.2.14 2.126.142,213,255

120 DAT.A 106,1l9',,1215.142,1I.59.16 9.189.255

130 DATA 159,1591,1.34,126,106,10 6,94.106,159,255

1,410 DATA 142.14..2.112,106,94,94. 106.112.255

150 DATA 159,159.134..126,10,6,10 6.134.,126,255

10013 .23,13,23,0

[i]~

1 [FOR I ., 0 TO 22: READ A: POK E BOO + I,A: NEXT

2 DATA 160.0,17,4.133,3.238,4. 8,192,136,208.5.206.132.3,240.6 ,202.208,245,76,34.3,96

10 C - C1:T - 100

20 RESTORE

27 FOR Z - 1 TO C + 24.: READ P : NEXT

28 IF P - 0 THEN 10

29 RESTORE: FOR W - 1 TO P + .23: READ WW: NEXT

3,0 READ K: IF K -255 THEN C -

C + 1: aOTO' 20

40 POKE 900,T: POKE 901.K 50 CALL 800

70 OOTO 30

100 DATA 13.23,13. :Zl.]:I., 23.13 ,23,41,50,13,23.0

110 DATA 47,41,40,37,31,31,2 8,31,"l7.255

120 DATA 23.26,28,]1.35.37,4 2.2515

130 DATA 35.3.5.29,2B.23.23.

21,23,35,255

140 DATA 31.31,25,23.21,21,2 3,25,255

150 C'AT}., 35,35,29,28,23,23,2 9.28,255

220 DATA. 255

1 DIM A(5,l) :FOR K-l T'O 1J:R.EAD

P:NEXT:GOTO J

2 READ P:IF P<>2S5 THEN 2

3 N-N+l:A(N.Ol-PEEK(S1) :A(N,llPIEEK (52) : IE' N<5 TBEN 2

10 C-O:T-3

20 RESTORE

30 FOR N-l TO C+1:READ P:NEXT 40 IF P-O THEN 10

50 POKE 51,A(P,O):POKE S2.A(P.l )

60 READ N

70 IF N-255 THEN C-C+l:GOTO 20 80 SOUND N.T

90 aOTO 60

100 DATA 1,2.1,2.3,2.1,2,4,5.1, 2.0

110 DATA 175,175,189.193.204.20 4.210.204,175,255

120 DATA 218.213,210,204.197,19 3.185.255

130 DATA 197,197.207,210.218.21 6,223,218,197,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

90 STOP

100 011.1'11. 12,14,15,16,17,19,20, 21,22,23.24,26.0.0.0.0

200 DATA 1.2.1.2,3.2.1.2.4.5.1 .2.0

210 DATA 0,35.85,117.15.255 220 0.11.1'11. 16,8,117.67,:n, 255

230 DATA 68,103.170,186,79,255 2~0 DATA 85.154.187,169,255 250 DATA 68,103,170,103.255 310 RESTORE NT

320 fOR N=2J410 TO 23425

330 READ X: POKE N,X: NEXT N 345 lET NM"'O

J50 RESTORE HS: LET HL=23426 360 READ X

365 IF )()NM THEN LET NM~X 370 IF X=O THEN GOTO ~OO JBO POKE HL,X: LET HL=HL+1:

GOTO 360

400 PORR HL,X: LET RL=ijL+l 401 LET X=HL: GOSUB 600 402 POKE 23403.LSB

(0) POKE 23404,MSB

4130 RESTORE MT

440 FOR N=l "0 NM

4S0 READ X

460 IF X=255 THEN GOTO 500 4.70 POKE Ill. X: LET HL"IILH:

CO'TO 450

500 POKE HL,X: LET HL=BL+l 510 NEXT N

511 RAND USR 23371 512 POKE 23409,0 530 LET X""US"R 23296

540 IF X"'255 THEN R:E1'lJRN 550 SOUND T.X: GOTO 5301 600 LEt MSB-INT (X/2~6) 610 LET LSB-X-(MSB*256):

RETURN

1000 RESTORE 2000: LET TO-O: LE T t=2000

1030 FOR N-23296 TO 23295+111 s 'rEP 8

10~0 FOR K=O TO 7: SEbD ~: LET '1.'o.='1'o.+A: POKE K+N.A: NEXT K 1050 READ A: IF Ao'ro TYEN GOT o 1080

1060 LET L=l+10: LET TO"'Q~ NEXT

N

1065 RESTORE : RETURN

1080 PRINT "EBRO DE DAllOS Nil. I.I NflA. "; t: STOP

2000 DA'fA 42.109,91.235.42,111. 91,58,779

2010 DATA 113,91,70,183,202,24. 91.175,949

2020 OA'fA 8,]5.62,15,160,195,36 .91. 602

2030 DA'fA 61.1,8,203.56,203.51'), 203.791

20(0 DATA 56.203.56.120.254.15. 202.65,9'71

2050 DATA 91,34,111.91.235.34,1 09.91,796

20160 DATA 6,50,113.91,33,114.91 ,:22.522

20]0 DATA 0,8,95.25,126,6,0,79., 339

2080 DA~A 201.26.19,183,194.81, 91,1,796

21090 DATA 255.0.201,17.130.91.1 95.65.954

2100 DATA 91,71,42.107,91.43.62 .255.762

2110 DATA 16,5,35,175,195,10.91 ,35,562

2120 DATA 190,194.103.9.1,195,88 ,91.35,987

2130 DATA 195,96.91,0.0.0.0,0.3 82

10 SOUND 7,56:S0UND 8,15 20 SOUND 1.,0

23 DIM X(16) ~~ESTORE:FOR N-1 TO

16 = READ X (N) :.NEXT 25 C"'O:T"'lOO

26 RESTOREIOOO

27 FORZ=lTOC+1:HEADP:NEXT 26 lFP=01.·HEN25

29 RESTORE10IO:FOR~~lTOP+2:BEAD WW:NEXT

50 READN: SS"'N 60 N ... rNT (N/16)

70 IFN~15THENC.=C+l :GOT026 80 GOSUB13C

90 N"'SS :'N",15ANDN

100 IFN..:lISI'HENC=C+l: GOT026 HO GOSUBLJO

120 aOTOSO

130 SOUNDO.X(N~l) 140 FORZ~ITOT:NEXT 150 RETURN

450 DATA 213,189.179,169.159,14 2.134,120,119,112.106,94,0,0,0, o

1000 DATA 5,10.5.10,15.10 1010 DA.TA 5,10,20.25.5,10,0 1110 DATA 0,35,85,117.15 1120 DATA 166,117.67,31.255

111111

IIIIIIII

1130 OAT.A 68.103,170,186,79 1140 DATA 85,15:<1,187,169,255 11§Q DATA 68,10,3,170,103,2:55

1 FOR I .. OTO 22: IlEAO A:: -POK E BOO + I, A: NEXT

2 DATA HiD. 0 • 174.1 J 3, 3 • 238 , <1 8,192.136,208,5.206.132.3.240,6 .202,208,245,76.34,3,96

23 DIH X(16): FOR N - 1 TO 16:

READ X(N): NEXT 2S C - O:T ~ 100 26 RESTORE

27 FOA:Ill, '" 1 TO C ... 40: REAl> P

: NEXT

2B IF P • 0 THEN 25

2.9 Q.ESTORE : FOR W = 1 TO P +

4. 7: READWW: NEXT

50 READ N:SS .. N

60 N - INT (N I 16)

70 IF N .. 15 THEN C = C ~+ 1: G

OTO 26

SO COSUB 130

90 N - SS - N ~ 16

100 IF N - 1S THEN C C + 1~ eero 26

110 cosua no 120 aOTO 50

130 'P'OKE 900, T: POKE 901,:X (N +

I}

140 CALL 800: RETURN

450 DATA 47,4.2,40,37,35.31.29 .2B.26,25.23,21.rr,~.b.o

1000 DATA 5,10,5.10.15.10 1010 DATA 5.10.20,25.5.10.0 1110 DATA 0.35,85,117,15

1120 DATA 168 .117,67,31,255 1130 DATA 68,103.170,186,79 1140 DATA 85.154.187,169.255 U50 DATA 68,103.170,103,255

ii

10 DIM MS,l) .X(16):FOR K"l TO 16:READ X(K):NEXT:A(O,O)-PEEK(5 1):A(O,l)-PEEK(S2)

15 FOR R"! TO 13:9.EAD P:NEXT::GO TO 30

20 FOR R-l TO 5: READ P: .NEXT

30 N-N+l:A.(N.O)-PEEK(51) :A{N,.l} .PtEK(52):IF N(S THEN 20

4.0 C-O: roo)

50 POKE 51,A(0,0) :POKE 52.ACO,l ) :FOll. N-ITO C+l: ItEAO P: NEX'T: IF

p'-o THEN 40

60 POKE 51,AIP,O) ;POKE 52.A(P,l )

65, SEAD N: SooN 70 N-IHT(N/16)

?S IF H-IS THEN C"C+J.:QOTO 50 80 GOSUB 130

90' N-S: N"15 .AND N

100 IF N-15 THEN G-C+l:GOTO 50 110 cosus 130

110 GOTO 65

UO SOUND X.( N+l) • T !RETURN

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

.180 L.OX 1113

190 JSR SOUND 200 LOX 18249 210 CMPX 16912 220 BLO 01

230 DEC 18239 240 LBN.! NLV

r

I

IIII1IIII

250 pa LDAIS

260 PAA LOX 165535 270 LEAX -1»e

280 BNE PAA

290 DECA

300 8NE PB

arc JSRCLS

320 LOA SFFU

330 MDA US

340 STA SFF2Z

350 STA SFPC2 3608TA SPFC4

370 STA SFFCIS

380 LOY ISSOS

390 LO.X 1$701

400 ST.X. Y++

4.10 LOX 1$005

420 aTX .Y++

4.30 LDX 1S200F

440 STX .Y++ 450 LOX ISl605 460 arx .Y++ 4.70 LOX IS12.21 480 arx ,Y++ 490 LOA 1200 500 LOX +255 510 JSR SOUND 520 LOA 1200 530 LDX .200 540 JSR SOUND 550 LDA 1255 560 LDX 1255 570 JSR SOUND

580 LOA ilOO

590 STA OLL"'1 600 LBRA GBIN

610 SOUND EQU $5133 620 CRARPREQUS"lBCA 630 DLL EQU SSlEO 64.0 GUN EQU .$48E.2 650 NL ..... EQUS4.8F7 660 eLB EQU S<tACC

OS SINOS

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

170 add ht , 0 e

180 1<3 a,255 190 push hI 200 call 77 210 pop hl

220 1.0C: hI

230 inc hI

240 Id a.255 250 push hI

260 call 77

270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 -490 500 510 520 530 540 550 560 570 580 590 600 610 620

111111

pop hI inc hI ld a.2S5 call 77

mo ie hI. (-5205) push hI

ie de, (62407) add hI,de

Id a.255

ea 11 77

pop hI

ld de.32

add hI.de

10 (-5205), hI 10 de. (62407) add hl,de

Id a,O

push hI

call 77

pop hl

Id de.32

add hl.ce

10 a.l

call 77

1d b.255

atr Id a,25S dl dec a

jr nZ,ol djnz atr

Id h l , (-5205) Id de,704. abc hl.de

jr e,mo

Id a, (-5221) dec a

10 (-5221). a

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

2050 POKE CP,PK:CP=1024+Y1ll32+Xlll 3:PK""PEEK(CP) :POK.E CP.239

2060 PRINT @321," BYTE SUPERIOR~ ., ,;8

2070 RS"'lNKEYS: IF RS80U THEN 20 70

2080 R~INSTR{C$,RS) :IF a-a THEN

2070

2090 F-O:ON R GOTO 2100,2110.21 20,2130,2140,2150,2160,2170 2100 Y~Y-1:GOTO 2210

2110 Y~Y+l:GOTO 2210

2120 X-X-1:GOTO 2210

2130 X-X+l:GOTO 2210

2140 AZ=l:OOTO 2040

2150 A2-0:GOTO 2040

2160 RETURN

2170 PRINT @384,"NO'JO CONTEUDO (HEX) "::INPUT HS

2180 V$-CHR$(VAL("~B"+H$)}:P"H+ Y"'11+X

2190 MIDS(AS(P/128},P+128*(P)12 8).1)=VS

2200 F~l:GOTO 2030

2210 IF Y<O THEN 8-8-4..'1.: v-o . r--; 2220 IF Y)7 THEN R=8+44: Y~7: F-l 2230 IF X<O THEN X~10:Y~Y-l!IF Y(O THEN H-H-l1:Y~O:f-1

2240 IF X)10 THEN X~O;Y=Y+l:IF Y)7 THEN Y-7: 8-H-+11: F~1

2250 IF Hm 10 OR 8"-43 THEN A-I :F=O:ELSE IF 8<1 THEN H=I:F-l 2260 IF H=179 OR H=212 THEN H-1 68:F-0 ELSE IF H)168 THEN 8=168 :F~l

2270 GOTO 2030

2280 CLS:FOR J~H TO 8+87 STEP 1 l:FOR 1'T-O TO 10

2290 PRINT RIGHT${"O"+REXS(ASC( HrOS(AS(J/128) .J+TT+128*«J+TT) )128}») ,2) in":

2300 NEXT:PRINT CRRS(S) ;:NEXT 2310 RETURN

2320 CLS:FOR J-R TO 8+87 STEP 1 I:TOR TT=O TO 10

2330 O=ASC (HIDS (AS (J/128) ,J+TT+ 128*«J+TT»128») :IF 0(32 THEN

2350

2340 PRINT " "; CURS (0) ;' .. ; ;OOT o 2360

2350 PRINT LEFT$(·on+8EXS{G) ,2)

27

10 CLEAR 5000:0IH ASO) ,D$Cl) ,D U60) :CS-"-"+CHRS (lO)+CHR$ (8) +C BRS(9)+·AHH+C~RS(13)+" ":D-l

15 TPS (0) .... BAS .. : TPS (I) ~nDAD" : 1'P S(2)-·LMA":TPS(3)="TXT"

20 CLS:PRINT @13,"menu·

30 PRINT @105,"cARREGAR SETon":

PRINT @169, "vER/EDITAR SETOR": P RINT @23J, n sAL.VAIl SETOR": PRINT @297,·dIRETORIQ"

40 R$-INKEYS:IF RS-"" THEN 40 50 R-INSTR("CUSO·,RS) :IF R-O T8 EN 40

60 IF SL-O AND (R-2 OR R~3JTHEN PRINT:PRINT"NENHUM SETOR CARRE GADO·:FOR K-1 TO 2000:NEXT:GOTO

20

70 CLS:ON R OOSUB 1000,2000,300 0.4000

80 GOTO 20

~ "" 'I'll 4

, ,

2360 NEXT:PRINT CHR$(8): :N£XT:R ETURN

3000 CLS:PRINT~SALVAR NO MESMO SETOR (SIN) 1"

3010 RS~INXEYS;IF RS<)"SW AND R S<>~N" THEN 3010

3020 IF RSa~S" THEN 3040 030 CLS:GOSUB 5000

3040 PRINT:PRINT"VOCE TEM CERTE ZA (SIN) ?"

30501 R$:INKEYS:IF R$<>"S" AND R $<)~N· TREN 3050

3060 IF RS"'"N" THEN RETURN 3070 OSKO$ D.T.S,AS(O) ,ASCl) 30ao RETURN

4.000 GOSUB 5050

4010 PRINT IPR.'TAB(14);"INICIO NO.'"

<t020 PRINT tpR. '" NOME EXT T

IPO DEL H

~030 FOR J~O TO 8:DSKI$ O,17,J+ 3 • DS (0) ,DS (1 ,

4040 FOR K-1 TO 256 STEP 32 4.050 GOSUB 6000

4060 IF ASC(V$)"255 THEN K-256:

J=B:GOTO 4120

4Q65 IF ASC(VS)-O TREN MIDS{VS. 1.1)1=" .. :DT-l

4070 PRINT IPR,MID$(V$.1.8) : TAB (9) ;"_";MIDS(VS.9,3):

4080 TP"VAL(MIDS(V$,11,l»)

4100 PRINT tPR,TAEH15) ;'TP$(TP) ; TAB(20)CHRS(4211'DT)

4110 DT-O

4120 NEXT R,J:RS"INKEY$:IF PR-- 2 THEN -tH.0

4130 RS~INKEY$:IF RS·~w THEN 41 30

4140 RETURN

5000 INPUT"NUMERD DA TRILHA (0-

34.) ". T

5010 INfUT"NUMERO DO SEToe (l-l

8) ";S

5020 INPUTNNUMEBO DO DRIVE (0-3

J - iD

5030 IF D)3 OR 0(0 OR T)34 OR T <0 OA S>18 OR S<l TREN 5000 5040 RETURN

5050 PR"O:IF(PEEK(150»Ol THEN,

B£TURN

5060 PRINT",SAIDA PABA 1\ IMPRESS ORA (SIN)?"

5071) RS-INKEY$:IF RS<)"S" AND R S<>"N" THEN 50'70

5081) IF Q,$ .... s· THEN PR---2 5090 RETURN

6000 VS-M~D$(D$(K/128) ,R+12S*(K >128) ,32) :IF LEN(VS)<32 THEN v~ -V$+MID$ (D$ (1+K/128) .1.32-LEN(V 5))

6010 R£TURN

COMO UlSAR 0 PROGRAMA

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· TABELA DESOR DENADA :":Foa K"'O TO A-l:A(K)"'·R· ND(99) : PRINT A(R}; ;NEXT:PRINT 70 L-O:R-A-l:GOSUB 1000

80 PRINT .. T.MIELA ORDENADA : or : F OR ,K=O TO A-l;PRINT ACKl ; :NExT 90 IF INKEYS<>" .. THEN 90: ELSE RUN

1000 IF S)L THEN I-L:J=R+1:V-A( L) ELSE RETURN

1010 1"1+1: IF A CO <v THEN 1010 1020 J·J-l:IF A(J'>V 'THEN 1020 10]0 IF J)-r THEN T-A(I) :A(I)-A (J) :A(J)-T:GOTO lOlO

104.0 T-A<L) :A(L}"A(J) :/dJ)=T 1050 R(LV)=R:LV~LV+1:B.J-1:GOSU B 1000

1060 LV-LV-l:R~R[LV) :L=I;GOSU! 1000

1070 RETURN

10 HOME

20 HTAB (11): INVERSE : PRINT " ORDENANDO NUMEROS "; NORMAL

3 0 PBI NT ; I t{PUT • QUANTOS HUM EBOS A SEREM ORDENADOS ? (1-100 0) ":A

40 IF A < 1 OR A > 1000 THSN 1 a

50 DIH A (A) ,II (1 +- SQA (A»

60 A(A) - 100: PRINT: PRINT ~ NUMEIIOS IFOElA DE OBDEM ; -" j: FOR

K - I) TO A - l:A(K) - INT (99 ~ RND {Ill + 1: PRINT A(KI,~ ";: NEXT: PRINT

70 L - O:LV - O:R - A-I: GOSU B .11.000

80 PRINT" NUM£ROS NA ORD.EM :"~: FOR K ~ 0 TO A - 1: PRINT A (K' j" .. s : NEXT

91lGET IS: IF IS < > .... THEN

90

100 RUN

1000 IF R > L THEN I : L:J = It

+ l:Q = A(L): aOTO 1010 1005 RETURN

1010 I I + 1: IF ACI) < v THE N 1010

1020 J = J - 1: IF A(J) > v THE 1'4 1020

1030 IF J > - I THEN T = A(I) :A(I) - A(J) :A(J) - T: GOTO 101 o

1040 T • A(t) :A(L) - A(J):A(J) = T

1050 B(tQl - R:LV - LV + 1:0 - J - 1: GOSUB, 1000

1060 tV • LV - l~R - R(LV):L = I: GOSUB 1000

1070 RETURN

10 CLS

20 PRINT TAB(10) "OR.DENACJ.O DE N I3M.EItOS"

30 PRINT:INPUT"QUANTOS NOMEROS SERA,O ORDENADOS (1-1000)";A

40 IF A(l OB ~>lOOO THEN 10

50 DlMA(A) .R{l+SQR(A))

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

1030 W-R.:R-TF:TF-W:GOSUB lOOO:W -1\ : a""TF : TF'''W

104.0 N=N+l:RETURN

11111

III HOME: DI:MT(3)

20 HTAB (14): INVERSE : PR.INT

~TORRE DE RANOI~: NORMAL

30 PRINT! PRINT : INPUT ft NUM£.BO DE ANEIS (2-9): ft: N

40 IF N c .2 OR N > 9 THEN RUN

50 FOR J .. 1 TO 3: INVERSE .: V

TAB (l6): HTAB (J 1< 10): PRINT J: NEXT : NO~MAL

60 FOR I - 1 TO N: BTAB (10):

VTAB (16 - Il: PRINT N - I: NEX T I

70 T(l) .. 15 - N:T(2) - 15:T(J}

= 15

80TT = 2:TF a l:R .. J: GOSUB 1 10

90 HTAB (14): VTAB (20): PRINT

~MOVIHENTOS~fti2 - N - 1 100 END

110 IF N - 0 THEN RETUSN 120 N - N - l:W B:R TT:TT

W: GOSUB 110:W = R:R = TT:TT W

130 ClOSUB 160

ItO W .. R~R .. TF:TF • W: GOSUS 110:W • R:B - TF:TF • W

15,0 N = N ,.. 1: RETURN

1601' (TF) .. T (TF) + l: HTM! (TF

1< 10): VTo\B (T (TF»: p:R:n"T .. "

170 !:ITM CTT lit 10'): V'l'AB (T(TT )): PRINT N:T(TT} ~ T(TT) - 1 180 RETURN

10 KEY OFF:CLS:DIK T(3)

20 PBIN'I TAB(3) "TORRE DE HANOI

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.. ( .. ;,

ANEIS (2-9): ":N I" . r-!"V, '"

40 IF N<2 OR N)9 THEN RUN ~

510 FOR 1-1 TO N:LOCATE 10,16-1: ' ~~.~

PRINT N-I :NEXT I ~.~

60 T(1)~15-N:T(2)~15:TI(3)·1.s ~~ ~

70 TT-2:TF-l:A-3:GOSUB lila 110. I "i?

80 LOCATE l4., 20 : P5tINT" MOVUIENT ~l, ~ c: :v ~

O:S".;2~N-l . t'''I \..-: ~t.\)

90 END J 'J.l'. • ~ ~.J . I

100 IF N"O THEN BETURN ~

llO NaN-l:W-R:R-'l'T:'TT-W:GOSUB 1 Ii

00 :W"R: R-T'l':TT-W :F

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,

80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240

)250

260 270 280 I 290

300 310 )20 ))0 340 350 360 370 )80 390 400 410 420 430 44.0' 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590

600 610 620 630 640

650 660

1111

III

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.

10 CLS:XS-CHSS(lJ}+CHRS(10) :DIM 0$(15,4)

20 rORK-1T06:FORJ~lT01:FORL-lTO 3: READA:O$ (I:<, J) -0$ (K .J) +-CHR.; (1) +eHBS(219~145*A) :NEXT:NEXT:NEXT 30 DATA 0,0,0,0,1,,0,1:1,0,0

40 DATA 1.0,0,0,0,10,0,0,,1

50 DATA l,O,O.D,li.,O,O,O.l

60 DATA 1,0,1,0.0,0,1,0,1

70 DATA 1.0,1,0,1,0.1,0,1

,BO DAT,A 1,0, 1.1 , 0 , 1.1 ,0 , 1

as LOCATE7.10:PRINT-QuantoB JOQ ,adores (1-6) 1";

90 AS-INlfEY$: IFA9<"P OR A$)"6'" TaEN90

100 PRINTAS : NP"'VAt, (AS) :CLS

ll!.0 FORN-l TaMP: PRINT"·nome do jo Qador":N: : INPUTNS(N) :NEXT

120 CLS:CL$-STRINGS(35," ")

130 DIMO (t11l.l2) ,P (NI' ,12) ,S (NP, 1 OJ

10 HOME 20 elLS • ..

DIM A$ (l2)

30 FOR T '" 1 TO 6: READ AS:OCS (T) • AS: NEXT

~O rOR T = 1 TO 12

50 ~,EAD AS: AS (T) ~ AS + LEFTS

(" 12 ~ LEN (AS)

1': NEXT

60 VTAB (10): PRINT TAB ( 10); "QUANTOS ,]OGADOll£3 (1-6) 7";

70 OET 11.$: IF 11.$ ( "I" 011 AS >

"6" THEN 70

80 NP a VAL CAS): PRINT NP: 01 M NS(NP) ,SC(NP) ,O(NP,12) ,P(NP,l Z) ,S{NP,lO)

90 HOME: FOR N ~ 1 TO Nil: !P'RI NT TAB ( 1) ;~NOME DO JOGADOR "; Nt'" • "~

100 INIIUT N$(N): NEXT H70 DATA <1>,<2>,<3> 1180 DATA (4).<5>.<6)

1 rso DATA UNB, ocrs, TilES, QUAT ROS.CINCOS,SEIS.4 IGUAIS

1200 DATA CASA. CBE!A,.CURTO. L ONGO,MISTO,YATCH

20 LET Q$ .. " ...•••••.••• ": LET Z$=~ ": DIM C(ll):

FOR N=1 TO 13: READ C(N):

NEXT N! DIM T(S): DIM R(S):

DIM D{S)

30 FOP! N .. IJSR ~ A'" TO USA ",e" + 7 ! READ A~ POKE N ,.A: NEXT N

40 DATA 2, ).4.5,6,7,11 ! 14.,17. 20,23,,25,27'

50 DATA 0,0,0,24,24,0,0,0 60 DATA 0,6,6,0.0.96,96,0

70. DATA 3,3.0,2.4,24,0,192.192 SO C.AT" 0,102,102.0,0.102.102 ,0

90 DATA 195,195.0,24.24.0.195 ,11)5

DIJOGOS 45

• AS REGRAS DO JOGO ROLANDO OS DAoos

• A ESTRATEGIA • 0 PlACAR

• GAUPOS DE PLACAR -=.=--- ~~IM~P:'7_:AE=S_=SA==~O

• UOG DOS DADOS DO ESQUELETO

=.=---- _;:O:.._:L:::___:.A<;O-MESTRE RIESULTADO FINAL

lao DATA 102.102.0,102.102,0, 102.102

liD DATA 0.24.48,96,255.96.48. 24.

120 PRTNT AT 10,,13; ~Y'ATCHIt:

INX 1: PRINT ,AT 12.7: It QUANTOS JOGAD<lRES'" 'TAB 11 ~"(1 A 6) It 130 INPUT NP: LET NlP"'lNT (N,P):

IF NP<1 OA NP>6 THEN GOTO 130 140 DIM O(NP.12): DIM P(NP,12) : DIH SCNP,5): DIM NS(NP,6):

DIM Q(NP)

15Q FOR N-l TO NP: eLS : PUNT AT 8.5:" JOGADOR It; (N) ; It ... , • TAB 5: -QUAL E: SEU NOME ?'.: INPUT 'WS: I F LEN W$>6 THEN LET W$= Wise TO 6)

160 LET NS(N)~2$( TO J-(LEN W, 1/2)+WS: NEXT N

10 CLS:XS-CRR${l3) =DIM 0$(6,4) 20 FOR )(-1 TO 6:Foa J=l TO J:fO It L"1 TO l:READ A:DS(K,J)-DS(K, J) +CBR$ (l.28+65I1fA) : NEXT

30 DS(K,J)-D$(K.J)+CHR$(llJ) :NE XT

40 D$(K.J)~STRING$CJ.131)+CNRS( 135) :NEXT

SO DATA. 0.0. 0.0.1,0.,0,0,0.1. 0,0 .0,0,0,0,0,1

60 DATA 1,0,0.0.1,0,0.0,1.1,0.1 ,0,0,0,1,,0.1

70 D\\TA 1,0,1,0.1,01,1.0. ,1 ,1,O.l .1.0,1.1,0.1

80 PRINT~PII.INT"QUANTOS JOGADOR£ S (1-6) ?":

90 A$~INKEY$:IF AS<~l" OR A$>~6 .. THEN 90

100 PRINT A$: NP-IJAL (A$) ,: CLS

110 FOR N-l TO NP:PRINT @65,"JO GADOa"jN:PIIINT" QU1\,L E SEU NOME

7· :. INPUT N.$I (Nl 120 CLS:NEXT

130 D~M O(NP,12).P(NP,12),S(NP, lO}

o LACO·MESTRE

A estrutura do jogo e bern simples, e consiste nestas poucas linhas:

140 FORR=lT05:FORI=lT012:FORNcl TONP

150 CLS:Ya2:GOSUB980:GOSUBI90

170 CLS:GOSUB350;CLS:NEXTN.I IBO CLS:GOSUB990:NEXTR:END

9BD lOCATE19-LEN(N$(N»/2.Y~PRI NTNS(N) :RETURN

170 FOR Ral TO 5: FOR 1=1 TO 12: FOR N~l TO NP

lBO BOImE!;I 4,: INK 0: PAPER 4.: cr.s : PRINT A:T 3,13 iN$1 (N)

190 FOR H-5 TO 27: PRINT

PAPER OjAT 5,M;~ ·:AT 19,M;" ~ : NEXT M

2'00 FOR M"'6 TO 18: PIlINT

P'APEIR O;A.T M,5i" ~.AT M.27t" " : NEXT M

210 GOSUB 240: ,PAUSE 0: aOSUB 4.3.0

230 NEXT N: NEXT I: GOSUB 1290 : NEXT .R: STOP

140 FOR A = 1 TO 5: FOA 1 ~ 1 TO 12: FOR N = 1 TO NP

150 FlOME:1" 2: GOSUB 980': GO SUB 190

170 HOME GOSUB 350:' HOME : N

EXT N,I

180 HOME GOSUB 990: NEX·T R:

END

980 HTAB (19 - LEN (N$(N» I 2): VTAB (Y): PRINT N$(N): RETU RN

140 FOR R~I TO 5:FOII. I-I TO 12:

FOR N-l TO NP

·150 CLS :W"6: 1-2 : GOSUB sao :OOSUB.

190

160 SOUND 50,3:FOR E-l TO BOO:N EXT

170 CLS:GOSUB 3S0:CLS:NEXT N,l 180 CLS::OOSUB 990 :NEXT 11: END 9870 PRINT @Y*32+W-(LEN(N$(N») ) 12) • NS (N) .RETURN

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 .

260 PLAY·06L64.CS":TR(C)-T(D) :C- 0+1

270 .LOCATEO. 9: PRINTCLS :NEXTD 280 IFC"'6THENGOSUB34.0:RETURN 290 FORDgC TO S:TR(O)-INT(RND(TIHE)*6)+1;NEXTD

300 GOSUB34.0

310 T"T·4-1

320 IFT<>4THEN200

330 iFORE-IT0700~NEX:T:RETUJRN

340 FORD-IT05:T(D)-TR(D) :NEXTD:

RETURN

70 FORD"1T05:FOBG-IT04:LOCATEO ,G+4:PRINTD$(T(O).G) .:NEXTG

.O:BETURN

190 T = 1: FOR 0 - 1 TO 5:T(O) a INT ( RND (1) * 6) + 1: NEXT

200 VTAB (T III 2 + ]): PRINT "J OGO II iT:

210 GOSUS 970: IF T = 3 THEN :3 10

22~ C - 1: FOR 0 • 1 TO 5

230 BTAB (9 + 0 '" 4.): VTAB (9) : PRINT "?~;

240 OET 11.$: IF 1.$ < > "s" AND

AS < > "N'" THEN 24.0

250 IF AS - "N'~ THEN 270 260 TR(C) ~ T(O):C = C + 1

270 HiM (9 + 0 '" 4): VTAB (9) : PRINT .. ": NEXT D

280 IF C ~ 6 THEN GOSUB 349:

RETURN

290 FOR D • C TO 5:TR(D) - IN T e RNO (l) '" ,6) + 1; NEXT

]00 GOSUB 340

310 T = T + 1

320 IF T ( > 4 THEN 200

330 FOB Eel TO 700: NEXT: II ETURN

.340 FOn 0 = 1 TO 5:T(D) = TR(D ):NEXT :RETUIIN

970 FO~ 0 - 1 TO 5: HTAB (D '" 4. + B): 'VTAB (6): PRINT DC$(T(D »;: NEXT: RETURN

24.0 LET T-l: FOil D-1 TO 5: LET T(D)-INT (RND*6)+I: NEXT D

'250 PUNT AT 1!)+·TIft3.1 j "Joao .. j T 260 GOSUB lIBD

270 IF T-3 THEN GOTO 390 280 LET <=-1: FO.R 0-1 TO 5

290 PRINT AT 7+T*3.16+D*2;M1" 300 rca J"lTO 50: NEXT J

310 LET A$-INREY$: IF AS ...... THEN OO'TO 310

320 IF AS-~N" THEN SOUND .1.

- 10: GOTO 360

330 IF A$O"S" THEN GOTO no 340 SOUND .1.30

350 LET R(e)-T(D): LET C-C+l 360 PRINT AT 7+T*3.16+D*2;~ ". NEXT D

370 IF C=6 THEN GOSUB ~20:

LET T-4: COTO 40'0

JeO FOR o-c TO 5: LET ReD)-INT (RND*6)+1: NEXT D: GOSUB 420 390 LET T"T+l

400 IF T<>4 THEN OOTO 250 410 RETURN

420' FOR D .. 1 TO 5: LET T (D) -a (D ): N£XT 0: RETURN

1180 FOR 0 .. 1 TO .5: PRINT PAPER

2; INK 6, BRIGHT l,AT 6+T*3.16 +D*Z;CHB$ (143+T(D»: PAUSE 2:

SOUND .01. IillDIII4.0: NEXT 0,: RETUR N

140 FOR R-I TO 5 :F08 1-'1 TO l2':

FOil. N-l TO NP

150 CUI! W-6 : y- 2 : GOSUS 980: GO;SUB

190

160 SOUND SO.3:FOR £-1 TO 800:N EXT

170 ClS:GOSUB lSO:CLS:NEXT Nfl 180 ClS: GOSUB 990: NEXT R: E.ND 190 T-l:FOR D-1 TO S:T(D)-RND(6 ) : NEXT

2ao PRINT @64'11'T+64,"LANCE:"iT; 210 GOSUS 970:IF T-3 THEN 310 220 C-l:FOR D-1 TO 5

230 PIlINT @288.TAB(9+DIII4)"?" 24.0 AS-INKE:t$; IF A$<>· .. ·N· AND AS <>"8" THEN 24.0

250 IF' AS·"N" THEN SOUND 10.1 =0 OTO 270

260 SOUND lOO.1:TR(C')-T,(D) .c-e- 1

270 NEXT D:P:RINT e288

260 IF C-6 GO·BUB 34.0: RETURN

290 FOR D-C TO 5:TR{D)·BND(6):N EXT D

300 GOSUB 340 310 TooTH

320 IF T<>4 THEN 2001 330 RETURN

340 FOR 0-1 TO 5:T(D)-TR(D) :NEX T D:IlETURN

970 FO.R 0-.1 TO 5: FOR G-l TO 4.: P RINT @l.36+G*·J2+E)1It4.,D$(T(D) ,G)::

NEX'T G,P:II.ETURN

9870 PRINT @yIltJ2+W-( (LEN (NS (N) )/2) ,NS(N):RETURN

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,

350 C['!

360 Y-O:GOSUB980:PRINTSTRINGS(J 0.205) ,:" PI.ACAllR

370 PRINT·UNS :·XS·DOIS

........ :·XS·TRES ....•... :·xS·Q

UATROS : .. XS .. CINCOS : .. x

S·S£IS .......• :~

380 PRINT·" IGlJAIS .... :"XS"CASA

CHEIA .. :·XS .. CURTO •.•.•.• :·XS"L ONGO ••••••• : .. XS .. HISTO .•..... :"X

S .. yATCB : .. xS

390 PRINT·TOTAL •..•.•. ;·i (00 GOSUB460

4.10 I aOSUB,4 90 ~ GOSUB4 60

4.20 LOCATE22, 5: PRINT'~ <QUillauer tecla>"

440 AS·INKEYS:IFA$-~~THEN440

'. II ( ,

(51) lI.ETlJRN

4.60 FORO-IT012; IFP (N,D) -1 T'I4ENL OC~TE16,1+D:PRINTwX·1

4701 IFQ' (N" D) <>OTBENLOCATE15 ,1+D :PIlINTO(N.D);

48'0 NEXTD: C-O : FORD-l TOI2: c-e-o ( N I 0) :NEXT: LOCAT.£IS .15: PRINTC; : R ETURN

490 LOCATE2,20:PRlNT"TEHPO·RI:L OCATEl,21:PRINT-JOGADA"I;

500 LOCATEO,17:PRINT"RESULTADO

.";

510 FORD-ITO§:FORO-IT04:LOCATE9 +o1.-D, 15+Q:PRINTDS(T (D) ,e); :NI£XT G,D

520 LQCA.TLl6, 20: PRINT" ReCOLHA 0

GRUPO", 530 1. .. 1

54.0 LOCATEIJ,I""":PRINTCHR$(60} ,; 550 BS-INKEY$:IFB$O" "ANDBS<>C HRS(JO}ANDBS<>CHlI.${Jl)THEN550 560 HBS .... "THEN620

570 LOCATE13,1+A:PRINT" "j

580 IFBSaCHRS(lO)ANDA)lTHENA-A- 1

590 IFBS"CHR$ (31).ANDA<12TRENA-A +1

600 PLAY"06""" 610 00'1'054.0

620 LOCATElL3,I+A:PRI.NT"· ";:IFP( N I A) OOTB.EN950

630 IFA>6THEN700

64.0 c-o

650 FORD-1TOS:IFT(D)-A TBENC-C+ 1

660 NEXTD

670 O(N.A)"'C*A 680 P(N.A)-lI. 69C11 RETURN

700 IFA=11THENFORD"lT05:0(N,ll.l ~O(N.ll)+T(D) :NEXT:P(N,11)~l;RE TURN

710 FORD=IT05:DCO)=O:NEXT:B-O:F ORE-IT06:C-O:FORD-tTOS:IFT(D)-E

THENC-C+l

720 NEXTD:IFC<>OTBENB-B+l 730 NEXTE

740 a~1:FOnF-IT06:GOSUe1140:IFC <>OTHEND(a)~F:G=O+l

750 NEXTF

760 P(N,A)-I:A~A-6:0NA GOT0770. 810,830.870,960,890

770 IFB}2THEN900:IFB-IGOSUBI160 :O(N.7)=C*4:RETURN

780 F-1

790 GOSUB1l40!' F- Nl.:IFC()4ANDF{ >7THEN190ELSEIFC(4THEN900

800 O(N.7)B4~(F-1) :Q~TURN

810 IFB(>2THEN900E['SEF=D{1) :G09 UBl140:IFC=3THEN820E['SEF-D(2}:C OSUBl140:IFC(>3TREN900

820 FORO"IT05:0(N.B)-O(N,8)+T(O ) : NEXT: RETURN

BlO IFB(>4THEN850ELSEGOSU81160:

IF co 1BANDCO 1 OANDC<> 14. OR (C-l4. ANDD (,4.) -6) THEN900

840 O(N,9)-15:RETURN

850 IFB<>5TBEN900ELSEGOSUBl160:

IFC<>20ANOC<>15ANOC<>16ANOC019 THEN900

860 GOT084D

870 IFB<>STHEN900ELSEGOSUBl160:

IFC<>20ANDC(>lSTREN9QO

4$

sso O{N,lO)-30:RETURN

890 IFB<>lTHEN900ELSEO{N.12)"SO :PLA'l~Gl!'G~:FORE·IT0700:NEXT:RET URN

900 PUyw03GGGn:LOCATE22.5:PRIN T~ileoal. &LUMINA?";

910 A$-INKEYS:IFA$<>~S"ANDA$<>· B·ANDA9<>wN~ANDAS<)·nRTREN91C11 920 n.OCATE22.S:PRINTSTRINe$(17, 32) ;

9301 IFAS .... N·ORA,$=·fj"TBENP (N. A+6 ) ",0 : aOT0530

94.0 P{N,A+6)-1:AETURN

950 PLAY'M03CFO": LOCATE22, 5: 'PAUI T·Q,RUPO OCUPADon; :FORE-IT0700:N EXT:tOCATE22,5:PRINTSTRINGS(14. 32) j. :OOT0530

960 RETURN

1140 C-O:FORO-IT05:IFT(D)-F TBE se-e-r

1150 NEXTD:RETURN

11150 e-o: FORD .. 1 TaB: C"'C+D (D) : NEX TO:RETURN

350 HOME.

J60 Y '"' 1: G'OSUB 980: INVERSE :

PRINT ~»»»»»»»»»»»> ») PLACAR «<"

370 NORMAL : PRINT : FORT = 1

TC 12: PRINT A9(T): NEXT

380 PRINT: INV.ERSE : PRINT "T

OTAL : NORMA['

400 COSUB 460

410 GOSUB 490: GOSUB 460

4.20 STAB (22): VTAB (8): PRiNT

"<QUALQUER TECLA)8;

440 GET AS: IF AS - R. THEN 44 o

450 RETURN

460 FOR D = 1 TO 12: IF P(N,D) ~ 1 THEN BTAB (15): VTAB {3 + D): PRmT PX·;

470 IF O(N,ID) < ) 0 THEN RTA B (is): UTAB (3 • D}: PRINT O(N ,0) •

48'0 NEXT D; C - 0: F'Oa D .. 1 TO

12:C - C + OtN,D): NEXT

485 HTAB (15): VTAB (17): :PRIN T C: RETUBN

490 VTAB (22): PRINT TAB( 3) i "T£M.PO~ :A: PRINT TAB ( 1) i",JOGA DA ";1

500 V'fAB (19): PRINT ~REsUtTAD 00 ~ "i

510 FOR D ~ 1 TO 5: UTAB (19):

HTAB (9 + 4. - 0): PR~NT DCS(T( D»;: NEXT D

520 HTAB (16): VTAB (21): PRIN T -ESCOLHA 0 GRUPO-,

530 A-I

540 STAB (13) 1 VTAB (3 + A): P RI.N'T eBR; (60) j

550 GET B$: IF BS < > CHRS ( 81) AND BS < > CHRS (90) AND B$ < ) CHA$ (32) THEN 550

560 IF as· CBRS (32) THEN 62 o

.570 BTAB (I3l: VT.AB (3 + A): .P' an'T ~ ":

580 IF B$. eKRS (81) AND A :> 1 THEN A • A-I

590 IF B$" eRRS (90) AND A <:

12 TaEN A - A + 1 600 PRINT eRRS (7)

610 GOTO 540

620 STAB (13): VTAB (3 + A): P RINT· .j: IF P(N,Al ( ) 0 THE NI 95,0

630 IF A > 15 T8EN 100 640 C "" 0

650 FOR D ~ :1. TO 5: IF (T(D) •

A) TREN C .. C + 1 660 NEXT D

670 OCN,A) = C * A 680 peN,A) ~ 1

690 RETURN

700 IF A • 11 THEN FOR 0 • 1 TO 5:0(N,11) ~ O(N,ll) + T(D):

NEXT :P(N,ll) = 1,: RETURN

710 FOR D ~ 1 TO 5:D(D} - 0: N EXT :8 - 0: FOB E • 1 TO 6:C ~ 0: rOR D • 1 TO 5: IF 'F(D) .. E THEN C .. C + ],

720 NEXT 0: IF C < > 0 THEN 8

= S' +1 730 NEXT IE

740 G-= 1: FOR F - 1 TO 6: GOSU B 1140: IF C < ) 0 THEN D(O) g

F:GiioG,+l 750 NExt F - ~

760 P(N,A) ~ 1:A ~ A - 6: ON A COTO 770,810,8]0,870.960,890 770 IF B > ~ THEN 900: IF B - 1 COSUB 1l60~0(N,7) C "" 4: RE TURN

'BO F .. 1

790 OOSUB 1140:F - F + 1: IF C

< ) 4. AND F < > 7 TREN 790 795 Ir C < 4 TBEN 900

BOO OrN,]) - 4 * (F - 1): RETUR N

810 IF 8 < > 2 THEN 900

812 F • D{l): GOSUB 1140~ IF C = 3 THEN 810

8141 F c. D(2}! COSUB 1140: IF C < ) 3 THEN 900

820 FOR 0 • 1 TO 5:0(N,8) • O( N,8) + T(D): NEXT : RETURN

830 IF B < ) 4. THEN' B50

835 COSUS 1160: IF C ( ) 18 A ND C' < > 10 AND C -:: :> 14 OR ( C .. 14 AND D(4) .. 6) THEN 900 840 0(N,9) - 15: RETURN

eso IF B ( ) 5 THEN 900

B55 OOSUS 1160: IF C < > 20 A

ND e < ) 15 A1m C < ) 16 AND

C < ) 19 THEN 900

860 (lOTO B40

B70 Ir-O < ) 5 THEN 900

875 GOS:llB 1160: IF C < > 201 A NO C < > 15 THEN 900

BBO O(N,10) c 30: RETURN

890 IF B < ) 1 THEN 900

895 O(N,12) = 50: PRINT caRS ( 7): FOR E= 1 TO 700: N'EXT : RE TURN

90C PRINT CARS (7); CHRS (7):

STAB (22)! UTAB (5): PRINT ~il eo~l. ELIMINA?";

910 GET A$: IF AS < ) "S~ AND AS < > "N" THEN 910

920 HTAB (2:2); I.7TAB (5): PR.INT

CL$;

930 IF A$ ~ ~N· THEN P(N,A + 6 ) .. 0: GO TO 53'0

940 P(N,A + 6) .. 1: RETUHN

9510 PRINT cans (7). mm.$ (7):

STAB (221: VTAB (5):: PRINT "GR UPO OCUP.ADO";: FORE'"' 1 TO 700 : NEXT

955 HTA.B (22): VTAB (5): PR.INT

CLS;: GOTO 530 960 RETURN

1140 C .. 0: FOR D - 1 TO 5: IF T(D) m F THEN C '"' C + 1

1150 NEXT D: RETURN

1160 C = 0: FOR D = 1 TO B:C ~ C + D(O): NEXT 0: RETURN

430 BORDElI 0: ,PAPER 0: INK 6:

CLS

-·114.0 PLOT 4. ,4.: DRAW 0,167: DRAW- 124,0: DRAW 0.-167: DRAW -124.

o

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

1260 NEXT' D: RETURN

1270 LET C=O: FOR 0-1 TO tk LET

C .. C+D (0): NE,leT D: RETURN

1280 DATA "UNS", "DaIS". '''TRES'','' QUATROS". "CI.NCOS" ,"SEIS", '''IGUAI SOl. ·CA.SA CREIA". "CUilTO". "LONOO" ,·MISTO·,·YATCH·,·

"TOTAL"

350 'CLS

360 w-6:y-O:GOSUB g80:PRINT"*~* "'SCORE"'''' *1r "

370 PRINT-UWS ..•...... : .. XS .. Dors

........ :·XS .. TRES :·xs·g

UATROS :·XS~CINCOS , :"X

$ .. S£I8 :-

3BO PRINT·4 OF A KIND.:"XI·FULL

HOUESE .. ;·XS·SHORT RUN ... :·XS" LONG> RUN .•.. : "'X$" SHORT RUN ••. : II XS~lONG RUN •.•• :·X$~CHOICE ..... . : "XS"¥A.TC8 ...•... : "XS

390 PRINT~TOTAL •..•... ;·;

4100 GOSUB 460

~lO GOSUB 490:009U6 460

420 PRINT @466,"qualQuer tecla" i ;PBINT ~49a,·para contin~ar~j 4.30 SOUND 60,1

(40 A$~rNKEY$:IF AS~"· THEN ~40 4.50 RETURN

460 .FOR D"1 TO 12:IF peN,D)-l T HEN PRINT @45+D*32,·X·;

470 IF O(N.D)(>O THEN PRINT @45 -f,D*32.0(N.D) I

480 NEXT D:C-O:FOR 0-1 TO 12:CC+O (N, D) : NEl<T.: PRINT @4.93, C; : RET URN

490 PRINT @53,"ROUND"Ri:PRIN1' @ B·4, "S.ECAO· I;

500 PRINT @115,"GRUPO FINAL-"; 510 FOR 0-1 TO 5:Foa G-l TO 4:P BINT @lll+G~32-(D>Jl*11a+4~D,D$ (TCD) ,0) ;:NEXT C.D

520 PRINT @403, "SELECT 'GROUP"; 530 A-I

540 PRINT @49+32~A,CRRS(95):

550 BS-INKEY$:IF BS<>· .. AND BS O"A" AND B·SOCHR$ (10) THEN 550 560 IF B$~R ~ THEN 620

570 PRINT @49+J2"'A,· .~

5B~ IF BS-"~· AND A>l THEN A-AI

590 IF .BS-CRRS (10) AND MI2 THE N A"A+l

600 SOUND 200,1 6}0 GOTO 540

620 PRINT @~9+32*A,N R;:IF peN, A)<>O TH"EN 950

630 IF A>6 TBEN 700 640 c-o

650 FOR 0-1 TO 5: IF T ('0] -A TlIE'N C-C+l

1561) NEXTO

670 O(N,A)-ClI:A 680 P(NIAl"} 690 RETURN

700 I~ A-lI THEN FOR 0-1 TO 5:0 (N.ll) -0 (N,ll) +T{O) : NEXT : P (N.ll )-I:RETURN

710 FOil 0-1 TO 5:D(D)-O:NEXT:BO;FOR £-1 TO 6:C-O:FOR DOll to 5 ;IF T(D)-E THEN C-C+l

120 HEX.T O:IF COO TH .. EN BOle+! 730 fiEX" E

740 a-l:FOR ,-1 TO 6:005U8 1140 :1F C()O THEN O(O)-F:O-O+l

750 NEXT F

760 P(N.A)-1:A-A-6:0N A GOTO 71 0.810.830.870.960.890

770 IF 8>2 THEN 900 EtSE IF 8-1

GOBUB 1160: 0 (N. 7) -CIt4: BE.TURN 780 F-l

790 GOSUS 1140:F-F+l:IF C<>4 AN D F<>7 THEN 790 ELSE IF C«( THE N 900

800 O(N.,7)-4*(F-ll :BETUM

810 IF S<>2 THEN 900 ELSE F-D(l ):OOSUB 11(0;!F C-3 THEN 820 £L BE F"D(2) : GO SUS 1140: IF c<>j TS EN 9100

8,20 rOR 0-1 TO 5:0(N,8)-O(N,8)+ T(D) :NEXT:RETURN

an IF 13<>4 THEN 850 ELSE GOSUB

1160;IF C<>18 AND C<>10 AND C< >14 OB (C-14 AND 0(4)-6) THEN 9 00

8·40 0 (N. 9)-15: RETURN

650 IF 80S THEN 900 ELSE COSUS

1160: IF C020 AN 01 COIS AND C( >16 AND C<>19 T8EN 900

860 GOTO 84.0

870 IF BOS TIIEN 900 ELS.IE: OOSUB

1160:IF 0<>20 AND C<)15 TaEN 9 00

880 0(N,10)M30:RETURN

8910 IF '3<>1 THEN 900 ELSE 0 eN ,1 2)-5Q:SOUND 5.8:FOR E-1 TO 700:

NEXT E: RETURN

900 SOUND 20,1:PRINT @4:J2,"ileQ al. PERDE?";

910 AS-INKEY$:IF A$<>~S" AND AS O",N" THEN 910

no PRINT @4.32."

.. i

930 IF AS·-N- THEN P(N,A+6)-O:C 01'0 530

940 P(N.A.6)-1:RETURN

950 SOUND 5.1:PRINT @433,"SECAO

PREENCHIDA"; :FOR £-1 TO 700 :NE XT:PRINT @433,"

": : GOTO 530

960 RETURN

1140 C-O:FOR 0-1 TO 5:IF T(D)-F

THEN C-C+l

1150 NEXT D:RETURN

1160 C"O: FOB 0-1 TO B: C-C'+D (D) : t,lEXT 0; BE.TURNI

IMPREssAo 00 ESQUElETO

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,

990 CLS:PBINT"»»»»» PLAC

AR FINAL cccccccccc-

DEJOGOS 45

1000 LOCATEO,4:FO~D·ITONP:PRINT N$(D):NEXT

1020 FORD-lTONP

1030 C"O:FORE"'lT012'~C=C+Q(D,E):

NEXT:S{D,R)~C:NEXTD

104.0 FORD~lT05:LOCATE1+D)II.'4.,2:PA iNTD; :NEXT

1050 PRINT" T'OTAL" 106D FOAD""-lTONP 1070 FORE=lTOR

1060 tOCATE]+Ew4,3+D:PRINTS(D,E ) ; :NEXTE ,D

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

5: PRI~T INK 2:TAB (4+.0*4.);01;, : NEXT 0: PRINT INK 0:" TOTE

1340 FOR D-l TO NP

1360 L~T C-O: FOR E-l TO 12: LE

T C-C+O(D,E); NEXT E: LET S(D.R ) =C: NEXT D

1370 FOR D=1 TO NP: FOB E=1 TO It

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:

10 POKE 23674,0: POKE 23673.0 : POKE 23672,0

20 BORDER 0: PAPER 0: INK 6~ CLS

30 OEF FH t{)~INT «(65536* PEEK 23674.f.256lt:PEEK 23673+ PE"EK 23672) 150)

4.0 LET t~FN t(l

50 LET h~INT (t/(60*60)} 60 LET .m-INT (t/60)

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,

10 D1M A$(50) ,BS{50J,TS(50) 30 N .. N+l

40 INPUT "PRIMEIAO :NOME" ;AS (N) 50 INPUT "S:SGtJiNDO NOME'" ;8$ (N) 60 INPUT "TELEFONE";T$(N}

70 IF 11.$ (N) <>" .. AND N<SO THEN .J o

80 CLS:PRINT "GRAVMmO OS DAnOS

11) 0 O'PEN .. CAS: MO· rOR OUTPUT .A S IlL

11'01 PRINT 11. N 120 FOA L-l TO N

1310 PRINT 11,AS(L).BS(L).TS(L) 140 NEXT

1510 CLOSE It

160 PRINT "OADOsaRAVAOOS· 1710 2ND

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

l30 FOR L • 1 TO N

14..0 PRINT A$ (L): PRINT BS (,L) :

PRINT TS(L) 150 NEXT L

160 PRINT D9;"CLOSE ARQUIVO" 170 PRINT "DADOS GRAVADOS"

ISO END,

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

210 INPUTtl,N:DIH AS(N),BS(N),T SeN)

220 FOB L-l TO N

230 INPUT tl,A9(L),B$(L) ,TaCL) 2J5 PRINT AS(t) ;BSCL);TS(L)

24.0 NEXT L

250 CLOSE t1

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"

210 INPUT' -1, N: DIM AS (N) • BS (N) • Tam)

220 FOR ["1 TO 1\1

230 INPUT t-1.A$(L).BS(L) ,TI(L) 235 PRINT AS(L) ;BS{L) ~T$(L)

24.0 NEXT l

250 CLOSE '-I

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,

100 OPEN nCAS:ARQUIUO"FOR OU1'PU T AS U

i ro N-"'O

120 N-N+l

130 PRINT 'l.ASIN),BS{N).TS{N) 14.0 U' A$,(N)<> .... AND N(50 ra:EN 120

150 CLOSE t1

160 PRINT nDADOS CQAVADOSM 170 END

200 CLEAR 2000;D1M AS(S.o) .BSC50 ) "T$ (.5.0) : OPEN· "CAS: ARQUIIJO" FOR

INPUT AS 11

230 N-N+l:INPUT tl,AS(N).BS(N). TS(N)

235 PRINT AS[N} ;8$(N);TS(N) 24..0 I.F EOF (1) -a THEN 230 250 CLOS.E '1

Apague as Iinhas 210 e 220 e modifique as demais, Para a fita:

100 OPEN ·O· •• -l,"ARQUIVO" 110 H .. O

120 N-N+l

130 P:RINT '-I.AS(N) ,BS(N) .U(H) HO IF AS (N) <> .... AND N'(SO THEN 120

150 CLOSE ,-1

160 PRINT "DADOS GRAUADOS:'" 170END

200 CLEAR 2000;DII1).$(50).B$(50 l,T$(§O) :OPEN "I",I-l.'"ARQUIUO" 230 N-N+l:INPUT t-l,A$(N).B$(N) .TS(N)

235 PRINT A$(N) ;BS{R) ;T$(N) 24,0 IF ,EOF(-l)-O THEN 230 250 CLOSE ,-1

Para 0 disquete:

100 OPEN "O",ll."ARQUIUO· 110 1"-0

12'0 N-N+I

IJO PRINT tl.A$(N) ,B$CN).TS(N) 14.0 IF AS· (N)<>"" AND :N<SO THEN 120

150 CLOSE U

160 PRINT "DAnOS GRAVADOS" 170 END

200 cLE.AR 2000.DIMAS (50) ,DS (50 ) . TS (50) :OPEN "0". U, "AR.QUrUO'" 230 N-N+l: I'NPtrT 11.11.$ eN) .8$ (N) • TS(N)

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.

70 IF AS (N)O"FII'IJ" AND N(50 THE N 30

140 IF A$(N)<>"FIM" AND N<50 TH EN 120

240 IF A$ eN) O"FI,M" AND N<SO TH EN 230

DIM M{So) .8$(50) .T$(50) DS" CAllS (t)

N '" N + 1

INPU'f .. PIUMEIll:O NOME N lI\S (N

10 20 30 40 ) 50 INPUT "SEGUNDO NOME ":B$(NJ 60 INPUT ~TSLEFONE W;TS(N)

70 IF A$(N) < > "FIM'" AND N <

50 THEN 30

80 HOME: P~1NT "GRAVANDO OS D ADOS"

100 PRINT D$;"OPEN ARQurVQfi lllO N = 0

120 N - NI .. 1

130 PRINT DS: "WIIITE ARQUIVO'"

l4.0 PRINT AS eN): PUNT' BS (N) :

PRINT TS{N)

150 IF ~S{N) < > ~FI"~ AND N c 50 THEN 12.0

HiO PRlNTDS; "CLOSE ARQUIUO"

].70 P'RlN" "DADOS GQAV~DOS- 180 END

200 0$; - CHgS (04): PBINT DS i "0 PEN M.QUIVO"

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

20 FOB K-O TO l:Foa JaO TO 15 S TEP K+2

30 LINE(K*16+J,K*16+J)-{255-K*1 6-J,191-K*16-Jl,CL,B

4.0 NEXT J,K

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

140 IF KS~"2" THEN 190 ELSE IF K$="N" TRiEN 50

150 CLS:PRINT @16-tEN(SS{SS})/2 ,SSrSS) : PRINT

lao GOTO Z"lO

190 CLS~plnNT TABOO) ; "PR£UlSAO

SOBRE: W

200 P~lNT'P~INT" 1- DINRETRO/C~ RQEHlA,H: PRINT" :2- CON'l.'ATOfl/IlTAG ENS" ; PRINT" .1- FAMTLIA~: PRJNTM 4,- AMOR"

210 ~$-INKEYS;IF KS<~l" on KS>H 4." THEN 2HJ

220 CLS:PBINT TAB{20-L£N(SS(SS) ) 12) j 85 (8S) ; P1UNT

~30 FO~ K-D TO 7:LOCATE(64+32~K -31*(K}3»MOOJ2,LNT«64+32*K-J2 ;. eK}) 1132) :PRT.N'1' PS(SS.VkL(KS) -J .K) :NEXT

:til 0 PQIN'I' TI>.B (UJ) ; "OUTRA VE'Z (S IN)?"

250 KS=TNKE'i$:1F KS<>~S~ MO KS <>"N" THEN 250

260 IF K$="S" THEN 90 ELSE CLS; END

29 A,'LlCA~dES 19

160 C~8:FOR K~1 TO 2:B-RND(B)-1 :IF S()C THEN C-B ELSE K-l:NEXT 170 FOR L~Q TO J:PRINT @L-)2+K* 12B.HS{SS,C,L) :NEXT L,K

180 GOTO 240

190 CLS;PRINT @2,"VOCE QUER SAB ER SOBRE:"

200 PRINT:PRINT" 1- DINHEIRO/C ARREIgA-~PRINT" 2- CaNTATaS/VI AGENS~:PRINT" 3- FAMILIA~:PRIN T" 4- AMOR"

210 KS-INKE!$:IF KS<~l~ OR KS)'I." TBEN 210

220 CLS:PRINT @16-LEN{SSCSS»/2 • S$ (SS) ; PRINT

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

140 IF K$=B2" THEN 190 ELSE IF KS""N" THEN 50

150 Cts: paINT TAB(20-LEN(SS(SS »)/2) ;SS{SS) :PRJNT

160 C=B: FOR K=} TO 2:B=8*RND(TIME)-l:rF B<>C TAEN C~B ELSE K "1: NEX'f

170 FOR L-O TO l:LOCATE{{L*32+K ~128)MOD)2)+.,JNT«L*~2+K*128)/ 32) :PRINT HS(SS,C,L) ;NEXT L,X

10 HOM.!::

20 DIM HS(11.7.Jl.0(3,ll),SS(1 1) • Ps (11 , J ,7)

)0 FOB K ~ Q TO ]1: READ S$(R) ,D(O,K) ,D(l,X) ,D(l,K) ,D(J,K); F OR J = 0 TO 7: E'OR .L = 0 TO 2; READ HS[K,J,l): NEXT L.J,K

40 fO~ K c Q TO 11: fOR J = 0 TO 3: FOR L = 0 TO I: READ P$(K ,J,Ll: N~XT l.J,K

,I ! I I

APtICA~OES 29

50 HOME : PRINT nnIGITE SU~ DA T.l'I. 01:: NASCIMENTO (D, M, 11) ": INP

UT D,M.A:D INP IU):M c INT

1M)

bO If D < 1 on D ) J1 OR M < 1 OR M ) l2 OR (0 ) JO AND 1M = 4 on M ~ 5 OR M q OR M - jlJ) OR ID > 29 AND M • 2) THEN 50 70 ss - 0

BO IF M < 0 (J • ~;S) - 17. 1< (Ss =

) AND M • 1) OR M ;> 0 () , S5) + 12 * (S5 = 2 AND M 12) o~ (M - Ull.SS) AND 0 < D(0,S8») OR ( H O(J.SS\ AND 0 ) D(2.SH) TH EN CS = 58 • 1: COTO 80

90 HOME : PRINT "SEU SIGNO E • ;~!l(S"S)

lIlO prUNT: IITAi;J (lQ): PRINT n

VOCE OESEJA:"

110 Pl-IINT: PR1N'T TAB( 3)"1-

PERFIL DE PERSONAL1!)ADE"

120 PRINT TAB( J)"2- PREUISAO

PARA 19B8~: PR tNT : P[uNT 'rAB

( ]}"'N- ENTt!Ml NOVA OATA"

IJO GET KG: IF K$ < "1" OR IRS > "2" AND KS < ;> "N") THI':N 1]

o

140 If KS - "L" THEN 190 l45 IF KS • "N" THEN ~O

150 HOME: LET CE = 20 - LEN (S$ (SS» / 2: HTAB (eE): PRINT S$(SS): PIUN'J'

160 C = 8: FOR H = 1 TO 2:8 ~ tNT , RND [ J) '" 8): 1 F B < ) C

'I'HEN C ~ B: IF B ~ c: THEN K ~

1: N8K1'

170 FOR t ~ Q TO 3: LET WW = L

w 32 + K ~ 128: HTAB (WW - 32 '" INT (WW / J2»: UTAH ( INT ( WW I 32»: PH tNT US (SS. c , r..): NE XT L.K

18,0 GOTO 240

190 HOME: PRINT TAB( 10)MVOC E DESEJA:"

200 PRINT: PRINT ~ RO/CARREIRA8: PRINT ~ TOS/VIAGENS": PRINT 8 IA": PRINT n 4- AMOR8

210 GET K$: IF K$ < "18 OR KS > "4" THEN 210

220 ElOME :CE - 20 - LEN (8S(S S» / 2: STAB (eE): PRINT S$(SS ): PRINT

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~.

2'>70 D"!I; -\loC"~ ~ fd#t'l'U)so •• ,,,Ii. C"Cd" 25$0 DATA 5er~ Rempre Impe~av~l~e~tP Ilmprt 2~qD 0101'1\

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:!,

2900 DATA prevenldo.

2910 DATA·Carrelttilll! Joalhe1re. ator •• 2920 DATA "!:IroteaBor •• tder e~ al~u~~ (un~1

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) .•

J-'l4Q DA'f1>o '·c,;rr",ra9: JPrna.119ta, vendedor ,

HSrl !lAn, ·prott..:s~~ r , e e cr a t or ." jq6!l OA,'/I

j~]O OATil "COlI'l'oltlb11lddde" Sil~ltilno," JqB~ DATA ·r~IK~5. Vlr~em,'

14.'10 DATi'. 'Cor, ~",d r e lo,'

J~O~ DATA AR~ES,21,J,20.4

3510 O~TA 'Vnc@ "dora 9~stat clLhh~lro, • JS.O OATA .... s co l oca :;I"~5 nec e ae a dadee "II' .11 run".! ro lU~8r.

JSJ() D,.,,.I\

J~'10 DA'I'.i\ "Voc!! re~"1l be., nil." adver!lldad e a.

l~!O O· ... TII -tell! <:r!!njO forte, rna" !lane'

15liD DATA ·p~r-doa.r co'"' !acllldade.·'

J5JO OIlTA 'Vo~! ~ fl~ica~e~te atlvo. ~.

1580 011'1'11 '·'prefere eupc-r t e .. que po,,,,a p""t i

15'90 !lATA lPo;llvidllal"'''"t.~.

3600 Dl\TI\ 'Vo-c~ ~,,,[ r e , ~~ . .:Iore~ de t:a~e .. a, e

29 APLICA~(JES

29

lIDO DATA v"c~ apn,c:l.a lIlu:i to a c:o-mpanhla :1640 CA.T.A ·de ou.tr<l~, Pf!SR<>aa. I!H'I'~cialm.ente

:l1550 DAr" da<luel .... que <Ill" In't" .. Ierell nc "I! u .Modo d~ 9~r-.

3660 OAT1I ·C~rreira,,; ,,~ouQu,,'ro,'

3670 DATil e9pnftiata. 1680 DM"'-

3690 I)~TA i!O'SU8.!I l'oup;a,.1!!1 !!IQ OU:I!!IadaB", lit

3700 DATA "lIelllPre JUatil!l, l!!il8 de dc~"nbo!l" 3710 DATil !l1~ple=,

37211 OAT" -COIIPllt"bll idad'e: Tourc, Libr,a, L e,lo. "

3730 DATA "cor: ven.,elilo." 3740 D.A,T 1\

JlSi!J OIl.1:A TC!I\.IRO,:n.4. 21.:' 1160 D"'!A Vocll II BtetuI;IJ!lO e 3710 0111:11 ,"c .. lnt'u:c',

)780 l]A'I'A

Jl'.lO DIITA ·voc,e ~ c:!n(l~.d9"9 "I'm ih.nh.,1p". 3800 I)IITA prec.:!" de ae .. ur.an .... flnancelra II, alII

3810 DATA do ,<UB Qu:alqu"r cut r o ~ltmo.

3820 O .... TA • ':1I.i'>ora ~ejd nC'nIla1.,entl!! c~lmo, • 3830 DATA ·~oce pode se torna~ ~e.tvel, - ~,B40 DAT'" <'!!BPecuhente gef(Jr p1!;~a. dd:'l!n~1 e~ ~eu c~n~u;e_~

3950 O';''J'A S"u te .. pe~iim"nt.o de ap,...,d.ar a a JIi"!SQ ,W\TA l>"a~ col~ .... rr,eql.l""t,...,.,,,te 0

J970 DATil hv~ <I If!\> !!1~<i,i~c, par,", " lndll.c",,::19

;:leo u1l1a diet .. ,

:l,BIlD DATA ·voce !)ode ee t nr nar :.nH to 1'''''''''6 alvo·

Jll9D DATA "no amor, e ",!!per" qUe ",eu parcel

39110 DATA re]ei t", 1;0 ~1!.1t0 OPO!!to,

39i10 DAT1> ·voce E! mu~to "~n8u,,1: Qo!ita do· 3920 DATA cont~to de tecldcs aedo8oB

Ji!),C 01lT1I !:ontr ... ~ ,p"i" ,

39<10 DATA ·Carruril~: arqueolc;>9t!lta., b,lnque ire ....

3950 DATA ·~~ten~elra. emp~~!!~ria de' 3950 '~iA venda,".

3970 OIlTII ·Col!1(latlbl Hd .. de: li.r'I!J!I, Caprictd rnlo,·

ntu.H!I~"'.· <1150 DATA 0,," co t r d i anoe ~.tl! 09 mal" Qrave9,

~~.2a 011'1','1. 4.160 DA1A Ell JUnno VDCI! t,rabalbar.t dur o

11 ••• 11.

4170 !lATA e (la9tar,oj d.nhelro <:0.., .~,ua

4.180 DATA -c.na, Pl"o,Vd.vl!llllente coilllpr.a.n,do- 41911 O .... TA ,detrodOlll~l'it'col'i,

4..200 DATil £11 Julho/A(lo!lto yocl! en:l'."".nhrll 4210 DAT1I u. dll"",a entre all prl0·rid .. <le~ 4220 0 .... '1'11 030 t .. abaillo e tJa SUi! f.a"1b~, 4230 01.1'11

42"10 I)"'TI\ UIU "'1111~ .. de qI,O'e C'o.e"ard

~250 DATA ,em j .... "'lro Pod" ~e ",oat .. ar dlJ1'4do, u~o.

~26() 01lTI\ - • "270 DATA "

01280 "!lAT'A • E.II Outub;ro. vocl! enf;renta.rd. UII" 4290 DATA "perf"do de .au hu:.Of. envolv~d~' (JoO DATA. por u.." .... ,,&,,<1' .. "a~" .. "e1.ril que

4310 OAT';' Q d .. I." .. r~ .,,1 eO"!:I"u:1I 19011.

4320 DATA PDr .ui toa ano .. vocl! tie t "

4,330 OATA villnhQa. d .. ter Wlphneta 43010 DATA 1'06"'·1"0"" ""<;Iend'o .. 11 ..

43~O DAXA carn,l[',a;,

29A"LlCA~OES 29

4360 DAT~ HCft ~lti.oa dbia anos vcc!

4370 DA~A teA eetado 5n~ufttl.do po~ te~ 4380 DA~ ou naa eDcolhida 0 c~.inho certo. 4.390 D1IT'1. Ell 1986 voce ter" .. rellpo"ta. 44.00 DAT:A !ntre Fevo.-flaa e .I\br\l yocl!

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

160 OtL LOB tl00

170 DEL CLRA 180 DELio. DEClo. 190 BN.E OELA 200 DECB

210 BNE DEL 220 JSR <4.1409 230 eMPA 13 240 BNE BLP 250 RTS

260 MOVSUN EQll $400F 270 ELB EQU $4B59 280 MAN EQU S4DBE 290 SNK EQU $5178 300 SEA EQU $4CDE 310 awn EQU 950F1 320 DIE EQU $5050 330 BAR EQU $4045

1111111111111

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"

46 PROGIlAMA~O DE JOGOS 46

..::::::.=--- OBJETIVO DO JOGO

• 0 ROLO E A TINTA

• SOMA DE VERIFICACAO

~----~r~==~~~~=

• NlvEIS DE DIFICULDADE

• ESCORE

6 LET D$:INKEYS' IF D$<"lH OR OS>"5~ THEN GOTO 6

7 POKE 28951, ((DS-~lH)*2001+ «(DS··2")~175)+«(DS-W3"1*80) +((DS·"4")~40)+(D$~~5RJ

10 BORDE~ O' PAPER 1: INK 2:

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

50 CtS:PRINT @2.-ESCOLHA NIVEt DE DIFICULDAD£"

60 PRINT '200."1 - FACIL-:PRINT

1232,-2 - SIHPLES-:PRINT '26~. -3 - MEDIO-:PRINT e296,-4 - OIF ~CIL~:PRINT @328.-5 - IMPOSSIVE L-

10 AS-INKEY$:IF AS<-l· OR 1.$>-5

• 'rUIN 70

80 LV-VAL(A$):POKE 16162.6-LU·P OKE 16164.128+64*(LV)2):POK£ 16

46 PROGRAMAf,AO DEJOGOS 46

A tlnta eseerrende ns tell1 do 'fRS.Color.

161.RNO(256)-1

90 PMODE 3.1:PCLS 2:SCR£EN 1.0 100 COLOR 4:LINE(O.O)-(22S5.0l, PSET:COLOR 3:LINE(0.168)-(255.1 91l.PSET,BF

110 DEFUSQO-lSSOO:S-USRO(O)

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 I$~MID$(NS.7,2l+MIDS(NS.4. 2)+MID${N$,l.2) :R'ETURN

55

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.

Compressio de oitoparn ~res bytes;

1200 CS""CBII.$, (VAL CMIDS (0$,7.2) ») +CBR$ (VAL (MID$ [DS.4.2))+ceRS(V AL(MIDS(DS.l,2») : RETURN

55

1200 LET C$=CHRS VAl. OS (7 TO 8) 4-CFUl$ VAL 05(4 TO 5) + eHRS VAL

OS (1 TO 2) 1210 RETUAlII

Nao se esqueca de dirnensionar eS(3) e 1D$(8), no ccmeco do programa,

Deseompressao de ires pars ,oUo bytes:

1300 DSoRICBT$(STRS(ASC(MIDS{CS ,2») ,2}+R'-+RIGHTS (STRS (ASC(MI O${CS.3»)) .2)+~/·+RIGHT$(STR$(A SC(CS}).2):RETURN

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 MS··0000310590891201501812 12.242273303334."

1605 DI=VAL(MIDS(DS.1,2) :MI'=VA L(MIDS(D$.4.2)l :Al-VAL{MID$(D$, l.2l>

1610 NI"'VAL (MIDS (M$, (M%-l) *3+1. J)+nt

1620 IF Ml>2 AND (At AND NOT-oil =0 THEN NI"NI+l

1630 I<ETURN

55

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.

1700 D$=D1$~COSUB 1600:Nl=N~+ At*365+INT((At-l)/4)

1710 DS=D2$:GOSUB

1600' N2~Ni+At;""365+INT ( (M-lJ /4) 1720 paINT (NZ-N11 : RETURN

1700 L.ET D$"'D1$ 1705 COSUB 1600

1706 L~T N1~N+A""]65+INT CA-l)/4 1710 LET DS=D2S

1715 GOSUS 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.

Sao adicionadosao interpretador oito novos comandose funcoes:

• renumeta~ao de linhas;

• eliminaeao de urn bloco de linhas:

• numero de bytes Iivres na memoria;

• comprimento de urn programa;

• numeracso antornatica de linhas;

• catalogader de fitas:

• conversao de hexa para decimal e vice-versa,

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:

RANDOMIZE: USR 64:4.53

Nao e preciso pressionar < ENTER> apos entrar 0 nurnero hexadecimal.

S CLEAR 63488: BoaDER 0:

PAPER 0: HlK6: ct.s

10 PRINT AT 0.5: INVEP:SE 1 i ~'C ONJUN~O .D'E FERR.AMENTAS"

12 PRINT 1I.T B.2:" QualQue:r te cla para carregar proQrama em codiQo de maquina.": !PAUSE o

14 LOAD "CREF"CODE

30 APLlCA~OES 30

15 ct.s : PRINT ~Pokea.n.do codi

ee de lIIo11Qurin.a. Pl"e.pal:"e 0

~asgete pa~a q~avar.·

20 LET L-IOO: BESTOBE L: FO~ N~63·4.89 TO 6'lSISO STEP 16

J·G LET T"!): FOP. D"O TO rs

40 READ Jt.: POKE (N+D) .~: LET T""T+A:. NEXT D

50 READ A: IF' A<>T THEN

PRINT ~ERRO DE CHECKSUM EM ~; L: STOP

60 LET L=t+10' 70N.EXT N

100 DATA 62,12,205.48,252.205, 60',250,237.67.155,248,42.83.92 ,1,2019

110 DATA 0,0,126.254.128.40,9. 197, :M5 ,184,25,19], J, 235.24, 24.2,18-65

120 DATA 205,4.3,45,58,155,248, 2C~,4.D.45,239,4,S6,205,152,45, 33,171:H!

130 DATA 15,39.167,237,66,48,2 ,207,5.33,145.248,126,60,(0,]2 ,1470

14.0 DATA 35.229.237.91,83,92, 42.75,92.167.237.82,68.77.235. 237,2079

ISO DATA 177,197,229.245.204, 157.248.241,225.193.2]4,80,248 ,225,24,220.JI47

160 DATA 42,B],92.5R.155,248. 54,0.35.119.205,40,15,2]9.49. J.92.1656 170D1.TA56,42,63,92,20S.1B4. 25,42.75,92.43.167,237,82,216. 235.1876

laO D1.TA 229,239,224.15,49,56, 205.162.45,225.112,35,113,43. 24..22.8,2004

190 DATA 201,224.228,235,236, 239.201.6,255,0,0,10,0,22.9,6,4., 35,2148

200 .DATA 126,254,14.401.4,16., 2(8.225.201.197.35,35,35.78.35 .70 •. 16·13

liD DATA 42.83,92,217.1,1,0, 217,205,149.22.43.235.157.2]1, 66,1777

220 OAT-A. 235 .48.11,217,3.217, 197.2.05,184.25,193.23,5,24.234, 217.197,2442

2]0 DATA . .217.209 .''l2 .,1.55.248, 205.169.48,235,42,104,92,35,35 ,1l.5.3S,1986

240 DATA 114.235.62.0.167.1.9. 0,237,66,56,17.60,1,90,0,1115 250 DATA 237.66.56.9.60.1.132, 3,237,66,56.1,60.209,225,229, 1647

260 DATA 245.1]0.214.4,245,6,0 ,56.9,79.40,12,205.85.22,35, 1387

270 DATA 24,6,237,68.79.205, 232,25.193.241.197,79,6,0,9,65 ,1666

2eo DATA 229.197.35,35,2]5,42. 104,92.1,5,0,237,176.193,225. 229,,20]'5

290 DATA 197,239.224,164,5,5B, 19],16(,4,224,1,3.225.192,2.56 .1951

JOO DATA 205,.21.3,45,19],225,

198,48,119.43,16,229,229.42, 104.,92,35,2035

310 DATA J5~126,225.19a,ta,119 ,241,19],245.42,83,92,167,229, 237,66,2346-

320 Cl\'rA 225,4.8,8,197,.20,5,1B4, 25.193,235,24,242,2]5,J5,35. 293,126,2210

330 DATA 12B,1l.9.20L62.,O,2Q5. 48,252.205.26.31,)],0.0.62.0. 1372

340 DA'fA 237.66.229.193,,20!).43 .45.62.254.205,1.22.205,227.45 ,.201.22410

350 DATA 42.75.92.237.75.83.92 ,62.0,237,66,229,62,1,205,48, 16<06

JOO DATA ;i!5.2,.\93,205,43.,4S,205 .227.45,62,2,205.48,252,201, 221, 3J, 2239

]70 DA'rA 3.2,255,17.17,0.175..55 • 205.86.5.62,3,205.48,252,221, 1638

360 DATA 3 J , J.2 , 255, 22.\ , 126,0, 198.6.221.229,205.(8,252,62,13 .215.2]16

390 DATA 62.4.205,48.252.221. 225.221,35,221.126,0.254,255. 40,10.2179

400 DATA 6,HI,221,126,O,221.3S ,215,16.248.62,13,215,62,5,205 ,1660

4.10 DATA 48,252.221.33,32.255, 221.75,11.221,70.12.195.163, 249,205-,2266

420 DATA 142.250.62.10.205,48, 252,205.60,250,205.110,25,229. 62.,1.3,2128

430 DATA 215.62.11.205,46,252, 205.60,250,205,110,21,193,32, 16.229, .2118

4<10 DATA 35.35 .• 126,35,95,126. 87,225.237,90,17.4,0,237.90. 229,166,8

450 DATA 197 .• 62:,,0,237,66.,218, 87,252.195,89,252.6,0,191,205. 95,2158

460 OAT'A 2S2.20S •. 1l5,.252,193, 254,13.<10,26.254,58,48,240,214 .48.56.226B

410 DATA 236,245.4,120,254,6, 32,4.5,241,24.225,241,245,1~B, 48,2128

480 Dl~:rA 215,24.218,,221.33,49. 255,120,254.0.40.207.3),0,0, 221. 1890

490 DA'fA94, 0,,221.86 ,1,2.41,254

,0,40.7,237,90.56,13,61,32.1433 500 OAT'A 249.221,35",221.35,5. ]2,231.229,193.201.201,5,42,75 ,92,2073

510 DATA 237.75,83.92,2]1.66, 192,207,9.62,10,205,48,252.205 ,60,20110

520 DATA 25(}. 111 .30,255.,62,1.3, 215,62,12,206.4B.25.2.205,60, 250,34.1987

530 DATA 28,,255,33,4.B,48.34.59 .255,34.61.255,237.75,30.255, 205.1912

540 DATA 115.25L62.2,.50,107. 92,50.107,92,205,149,23,205. 176.22.1708

550 DATA 62,0,205,1,22,3),59, 255.6,4.126.229,197.205.129,15 ,1548

560 IDATA 193.2.25,)5.,16,2(5.205 ,44,15,205,23.27,221.33.58,92, 221,18.58

5'0 DATA 203,10,126,32,13,4.2 •. 89 ,92.205.167,17.62.255.50.58.92 .1503

560 .DATA 24.206,42,89,.92.34.93, .92,205.251,25,120,177.32.10. 223,.1715

596 DATA 254,13.40.17t.20S,176 .22,207.1,237,67.73.92.42,93, 92.178,8

6100 Ji)ATA 2.35.13,.8.5.21.229,42, 97,92.55.2]7,82,229,96.105.205 ,,110,195]

610 DATA. 25, .32.6., IQS ,184.25, 205.232.25,193.121,61,176,40, 4,7,191,1774

620 DATA 3.3,3.3.4.].237.9!.83 • 92,213,205.85.22.225,)4,83, 1425

630 DATA 92.19.],HII",19.42.,97, 92,43,43.237.184,42,73.92.235, 191J ,1874.

640 DATA 112.4],113.4J.115.4J, 114..237,75,28.255.205,115.251. 241.195,2185

650 DATA 195,250.3].62.255.126 .60.254.58,<10.8.119.11.121.128 ,176,1896

66·0 O.ATA 200,24,2].9.62,4.8.,119, 43.24,236,62.14,205,48,252.205 .60.1841

670 OATA 250,62,1],215.197',62, 15.205.48,252,~9J,46.2.96.124, 203.1983

680 DATA 31.:2 a 3, ai, 201. 31. 203, 31.230,15,205,189,251,215,124. 230.15,2207

690 DATA 205,189.251.215.97,45 .32,230.62,13,215,201,198,48, 25(.,58.2313

700 DATA 216,,198.,7,.201,,152,16 •. 205,48,252,17,85,255,6,4.213. 197.1982

71 a OAT I>. 205" 95,.252.205,115. 252.215,245,241,193.209.18,19, 16.239,62,2561

720 DATA 1],215,62.17.205.48. 252.221,33,85,255.17,0,16,33.0 .14.72

7301 DATA 0,14,4,2:21,126,11),221, ~S,214,4S.21a,a7.2S2.254.10.56 ,1760

740 DATA 2,214.7,254.16,210.87 ,252,71.254,0,40.3,25.16.1704 750 DATA 203,58.203,27,203,58, 203.27,203,58.203,27,203.58. 203.27.1964

760 D.ATA 1].32.208.229,193.205 ,<13.45.205,227.45,62,13,215. 201,20l,2139

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.

5i

DF98 IB 18 DC DC 06 06 0] 03 DFAO 06 06 DC DC 18 18 30 30 DFAS 60 60 C6 C3 66 6C 38 38 DFBO 84 D6 FF FF FF FF FF FF DFB8 00 01 03 07 1F 3F 7F FF DFCO 00 00 FF FF 3C 3C FF FF DFC8 06 08 76 FF FF FF 3E 3C DFDO 10 10 10 38 38 38 38 38 DFDS io rc 7C 38 38 38 10 10 OFEO 00 00 00 20 51 SA 04 00 DFES 00 00 00 82 45 29 10 00 DFFO 00 00 00 00 00 00 00 00 DFFB 00 00 00 00 00 00 00 00

Eooa 00 00 00 00 00 00 00 00 EDOS 00 00 00 00 00 00 00 62 E010 00 84 05 E9 00 C7 04 83 E01S 00 3E 04 DC 00 C4 03 4E £020 00 Be 03 93 00 C4 03 OS E028 01 3E 04 6E 00 11 05 93 E030 00 6A 06 31 00 8~ 05 6E E03B 00 11 05 E9 00 C7 04 62 E040 00 B4 05 93 00 84 05 2C BOA8 00 6A 06 62 00 B4 05 DC EQ50 00 11 05 SC 00 DC 06 DC EOSS 00 A7 07 43 4C 49 46 46 EDaD 48 41 4E 47 45 52 43 52 E06e 45 41 54 45 44 20 42 59 B070 2Q 41 ZE 44 4F 45 57 S2 E078 49 54 54 4S 4E 2042 59 £080 20 SO 2E 43 4C 41 52 4B E088 20 41 66 74 65 72 20 51 E090 20 73 68 6F 72 74 20 77 EG98 61 6C 6£ 20 57 69 6C 6C [OAO 69 65 20 20 20 20 20 20 EOAB 72 65 74 75 72 6E 73 20 ED80 74 SF 20 66 &9 &E &4 20 EOBS 74 68 65 20 67 6F 61 74 EOCO 73 20 6B 61 76 65 20 20 EOCe 73 70 72 65 61 64 29 68 EODO 69 73 20 70 69 63 6E 69 EOD8 63 20 67 6F 6F 64 69 65 EO ED 73 20 &1 6C 8C 20 20 20 EOE8 6F 76 &5 72 20 61 20 72 EOPO 6F 63 6S 79 20 65 6D 62 EOFB 61 6E 68 60 65 6E 74 20 EI00 20 20 20 20 20 20 20 20 E108 57 69 QC 6C 69 65 20 63 E110 65 74 73 20 SF 66 &6 20 El18 74 SF 20 72 65 63 &C 61 E120 69 6D 20 68 69 73 20 20 £128 6C 6F 73 74 20 70 5F 73 E130 73 65 73 73 69 SF 6E 73 E138 2C 62 75 74 20 69 73 20 E140 68 61 ~D 70 65 72 55 64 E14S 62 79 2Q 66 61 6C 6C 69 El!;Q 6E 67 .20 62 of 1'5 6C 61., Elsa 65 72 73 2C 70 6F 74 20 El6D 6a 6' 6C 65 73 20 20 20 ElGB 61 6K 64 20 76 69 63 69 E170 6F 75 73 20 73 GE 61 68 1179 65 73 2£ S4 6F 20 60 61 ElBO 68 65 20 20 20 20 20 20

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

ELBa 6D &:1. 74 74 65 72 73 20 BlEB 72 65 61 64 20 74 68 65 E248 56 65 72 74 69 63 61 6C
£190 77 6F 72 73 65 20 74 68 E1FO 20 66 6F 6e 6C 6F 77 69 E2S0 20 6A 75 60 70 20 20 20
E19S 65 20 74 69 64 65 20 69 E1FB 6E 67 20 6,1 6E 64 20 70 E258 20 20 20 20 20 20 20 20
E1AO 73 20 72 69 73 69 6E 67 E20'0 72 6S 73 73 20 27 S3 27 £260 20 42 6F 74 68 20 2D 20
E1AS 61 51!: 64 20 6S 65 20 69 B20B 74 6F 20 73 74 6~ 72 74 E268 44 69 61 67 6F 6E 61 6C
EIBO 7.3 20 69 6E 20 64 61 6E EZ10 2E 20 20 20 20 20 20 20 E270 20 6A 75 60 70 53 43 loF
ElBS 67 65 72 20 6F 66 20 62 E218 20 20 20 20 20 20 20 20 £278 S2 45 2D 30 30 30 30 30
Eleo 65 69 6£ 67 20 63 75 74 E220 20 4IE 20 20 20 20 2D 20 &280 30 4C 49 56 4S 53 2D 35
Rlce 6F 66 66 2E 54 6F 20' 68 E228 52 75 6E 20 20 20 20 20 E298 47 41 40 4S 20 4F 56 45
E1DO 65 6C 70 20 57 69 6C 6C E230 20 20 20 .20 20 20 20 20 ,E290 52 20 21 21 21 2.3 23 21
E10B 69 65 210 69 6E 20 68 69 E23B 20 20 20 20 20 20 20 20 E29S 23 23 23 21 23 2.3 21 23
ElEO 73 20 71 7S 65 73 74 20 E240 20 4D 20 20 20 20 2D 20 E2AO 21 23 23 23 23 21 23 21. SO CODIGO DlMAoulNA SO

1111
3E 00 DB
06 01 C:B
78 32 F7
20 as 3E
F4 OF 11
05 3E 01
03 00 21
211. F4 OF
FE 28 2,13
FE 2A 28
7E FE OF
1C FE 28
3E 28 01
CO 511. E6
00 32 !Fe.
Fa OF C9
02 CD BS
01 20 1B
F4 DF 11
F4 DF 01
03 01 CD
20 IF 3C
OF 01 A8
01 CD SA
3E 20 01
C9 FE 03
OF 2A F4
28 11 03
20 00 19
04 20 18
2A Fi! OF
01 00 3D
C3 H E7
.'3~ F7 DF
58 19 7E
FE 2C 20
22 F4 OF
00 ED 52
DE l!.1 03
£6 C9 FE
F7 OF 3A
23 2A F4
20 11 03
22, F4 DP'
11 02 01
32 F6 OF
B8 DE 3E
SA £6 23
58 19 7E
00 32 F7
CD FC E9
09 3E 00
OF 2B 01
02 02 CD
19 22 F4
Cit 00 21
11 83 00
03 21t F4
20 CD 69
2.2 F4 OF
11 02 01
100 21 6£
85 03 2A
ED 52 38
EA 311. FF
C2 EE E4
06 DB DO
E3 CD 38
6E 06 CO
.21 3E 04
0.1 21 6E
32 32 6£
DB 02 21
3A 00 EO E2.&.8 23 23 23 23 21 23 23 21 E4F8 EO 21 sz 00 22 01 EO 3E E748 79 FE OF 28 75
£280 23 23 23 CD 50 E3 3E 02 E500 03 32 03 EO 3E 00 32 04 E750 FE ca 57 20 OE
E2BB 03 FE 3E 10 32 48 SC DO E508 EO 31:: 02 32 05 EO 21 C1 E758 SF 20 02 06 B1
£2;1;0 21 58 EO 06 OS 3.E 46 21 .ESl!) 01 22 F4 OF 21 QO 00 22 E760 DF 19 09 CB SF
E2CB 86 00 CD 2:E E3 06 06 21 E518 F6 DE" 3E 00 32 FB OF 21 E76B 01 32 F6 OF 2;\
£2.00 CC 00 CD 213 E3 06 10 3£ E520 DF 00 22 oc EO 3E 00 06 E770 BF 00 ED 52 30
CDS 07 _21 62 02 CD 28 E3 06 E528 05 32 06 EO sO 32 07 lEO E778 32 F8 OF C9 11
£2£0 12 21 A2 ()2 CD 213 E3 06 E530 80 32 08 EO CD SF E3 CD E7BO OC 06 CD as 03
E2E8 02 21 E8 FO 11, 00 00 28 £538 313 E6 21 77 00 3A FF DF E7sa 11 21 58 19 7E
E2FO is ED 52 £1 20 F9 10 F1 £540 06 30 80 CD 3'E £3 38 29 E790 31 FE 2C 29 27
E2FS CD 50 EJ DO 21 8a EO 21 E548 CD 69 E3 CD 60 EA CD 11 E798 29 11 20 00, 19
E300 20 00 3E 07 0& FF CD 28 E5S0 E7 CD 71 Eo CD AF E9 CD E7AO 28 20 FE 20 28
E308 E3 06 BA CD 28 E3 11 2& E558 02 ;E6 CO A8 E5 CD 7F E5 E7A8 2B 18 211. F4 OF
E3l0 00 19 06 64 3E 46 CD 28 E560 3A FB OF EF 01 CA BC £9 E7BO a8 DE 11 02 02
E3,18 E3 3E FD DB FE ca 4F 20 ES&a FE 02 CA 04 E9 06 32 3E E7BB 23 22 F4 OF 3E
£320 .FB C9 3E FD DB FE CS 4F E570 F'F 3D 20 FO 101 FB 3£ FE E7CO DF 09 3E 02 32
E32B 20 Fa C9 C5 F5 DO 7E 00 ES78 DB FE CS 47 20 DO C9 3A E708 11 06 00 21 F7
£330 CD 3E' £3 F1 CO 69 E3 23 ES80 05 EO 3C CB 9F 32 05 EO E7DO OJ 311. F7 OF FE
E338 DO 2.3 01 10 EE C9 ES 21 Esse 101 68 OF FE 104 38 03 01 E7D8 30 32 'El7 DF ZA
E340 FB 3C 11 OB 001 06 IF 90 E590 78 OF 3E 2£ 21 2A 00 C5 E7EO 20 00 ED 52 22
E348 19 3D 20 FC £5 Cl 81 C9 £598 CD 69 £3 23 CO 69 E3 C1 E7Ee DB DE 3E 28 11
E350 DO 21 00 40 21 00 18 3E E5AO 21 44 00 CO 69 £3 23 CD E7FO 56 E6 09 FE 02
E3SS 00 DO 77 00 DO 23 28 E5 ESA8 69 E3 C9 3A 03 EO 3D 32 E7FB 32 F7 OF 2A 1',4
E360 11. 00 00 ED 52 £1 20 Fl E580 03 EO FE 00 28 01 C9 3£ E800 DE 3E 28 11 02
E368 C9 FS ES CS .ES D1 7A FE Esse 06 32 03 EO 3.E 20 0.1 00 E808 £6 11 40 00 19
E370 Oll. 38 11 05 11 00 07 19 E5CO 40 2A 01 EO 16 03 IE 02 £810 00 3D CD fo9 E3
£378 Dl 7A FE 01 28 06 D5 11 £5C8 CD SA E6 311. 04 EO FE 00 EBl8 20 lA 3C 32 F7
E3M 00 97 19 01 D5 11 00 40 ESDO 28 03 2B 18 0:1. 23 22 01 £820 OF 01 D8 DE 3E
E388 19 D1 3E ot! Cl FS OA 77 ES08 EO 01 3B OF 3E 2F 16 03 EB2B 01 CD SA E6 11
E390 24 03 Fl 3D 28 03 FS :l.B ESEO IE 02 COl SA E6 11 81 00 £830 22 Fi. OF C9 FE
E398 FS El Fl OS 11 00 58 19 E5E8 ED 52 20 06 3£ 00 32 04 E838 3E 00 32 F7 OF
E3AO 01 77 05 81 C9 00 00 00 E5FO EO C9 11 90 00 ,2A 01 EO ES40 11 20 00 ED 52
E3AB 00 00 00 00 00 00 00 00 ESF8 ED 52 20 05 3£ 01 32 04 £848 3E 2D CD 69 E3
JE3BO 00 00 00 00 00 00 00 00 E600 EO C9 01 EO OF 3A 09 EO Essa FE 81 20 33 3C
E3BB 00 00 00 00 00 00 00 3E E608 OB 57 28 03 01 £8 OF 2A ESS8 2A F4 OF 11 21
£3CO 10 32 FO OF DO 21 132 E2 E61.0 OA EO 3E OF 16 20 D5 CS .2:860 FE 2B CA C2 E7
£'3C8 06 20 C5 DC 35 E4 3E 00 E&18 CD 69 £3 23 C1 01 15 20 E868 07 2A F4 OF 28
E3DO 32 Fl OF DO 7E 00 00 28 E620 FS 3A 091 EO 3D 32 09 EO E870 2A Flo OF 11 20
E3D8 FE 21 20 OD 05 3A fO OF E62B 20 10 3E' OA 32 09 EO 2A £878 22 F4 DF 01 FO
£3EO 3D 32 FO DF 3£ 01 32 Fl £630 OA EO U 20 00 ED 52 22 E8BO 02 3E 26 CD 5A
E3EB OF 3A FO OF 47 21 IF' 00 E63IB OA EO C9 21 37 00 DO 21 E888 84 28 58 3C 32
E3FO 3£ 20 CD 48 E4 01 80 OF £640 F9 D7 06 06 C5 DO 7E 00 E890 F6 OF FE 01 28
E3FS 3A P1 DF FE 01 20 03 01 E64S 06 30 eo co 3E E3 3E 29 E898 OF 01 00 40 3E
~tg~ B8 DF 3£ 2C CD 69 E3, 3A 1£65'0 CD 69 E3 23 DO 23 C1 10 E8AO 02 CD SA E6 23
Fa DF 47 3£ 17 90 47 3iE E6se EB 09 ES DS £5 05 CD 69 E8A8 01 A8 DE 3E 28
E410 20 11 20 00 19 CO 49 E4 E660 E.3 23 01 15 20 F? E1 11 ESBO CD SA E6 3£ 01
£418 Cl 1.0 AF 21 31 00 06 OC E668 20 00 i9 01 10 20 EC E1 E888 C9 2A F" DF 01
1420 3£ 29 DO 21 75 E2 CO 2B, E670 C9 3A 00 EO FE 00 28 05 E8CO 28 11 02 02 CD
E4~8 E3 2j, 71 00 06 07 CD 2B E678 FE 03 28 01 C9 3A OE EO EBC9 22 F4 DE 11 40
E430 E3 CD 57 E4 09 21 00 40 EG80 FE 01 28 S5 2A DC EO 01 EBOO FE 2C 20 DC 3E
E438 06 OS OE; iF 23 7E 29 77 E688 20 OF 3£ 211. CD 69 £3 23 EaDB DF 3E 04 06 05
E440 23 00 20 Fa 23 10 11'3 C9 E690 3E 20 01 00 3D CD 69 E3 i9EO 3E 00 32 F6 OF
E44S CS 01 00 3D CD 69 E3 11 E69B 2A OC EO 11 EO 01 ED 52 i8Ee 32 F7 OF 2A 1'4
E450 20 00 19 Cl 10 Fi'2 093A E6AD 28 5D 2A OC EO 11 20 59 EBFO 00 40 3E 2.0 11
E4sa 00 EO 21 B8 OF 47 04 11 E6AB 19 7E FE OF' 28 51 FE 2D EBF8 SA EG 11 21 00
£460 013 00 19 10 FO E5 C1 21 E680 20 lA 211. DC EO 01 00 3D E900 DF C3 11 E7 11.
8468 SF 00 3E 3A CD 69 .E3 3A E688 3E 20 CD 69 E3 11 20 00 E908 3E 04 CD B5 03
E470 00 EO FE 00 2e OC F5 CD E6CO 19 22 OC EO 01 20 OF 3E £910 21 6E 06 CD 85
£478 83 E4 Fl FiE 01 28 03 CD E60B 211. CD 69 E3 2A OC EO 28 E918 DF 01 11 3D 3E
E480' A9 E4 C9 21 C9 01 CD 96 E600 22 DC EO 3E 01 32 DE EO £920 E3 11 20 00 19
E488 £4 21 91 01 00 96 £4 21 E60S C9 2A OC EO 11 00 58 19 :£928 01 AS DE 3E 28
£490 3A 01 CD 96 E4 C9 0'6 04 £6EO 71: FE 26 20 05 3E 02 32 E.930 CD SA E6 11 1E
E498 cs 01 00 3D 3E 2D CD 69 E6ES Fa OF 2A OC EO 3E 2A 01 :£938 03 ED SF 6F CD
E4AO E3 11 20 1]0 19 Cl 10 11'0 E6FO 28 OF CD 69 £3 23 CO 69 E940 F4 OF 11 CO 02
£4A8 09 21 C9 01 CD BO E4 2~ E6FS £3 3E 00 32 OE EO 69 2A E9"8 CD 311: 09 32 65
E4M 9.1 01 CD Be E4 21 3A 01 £700 OC EO 01 00 3D 3£ 20 CD £950 DF 3D 3.2 FF OF
E488 CD BO E4 C9 3£ 04 01 90 E70e 69 E3 21 DF QQ 22 DC EO £958 21 411. 01 3E 8E
£4CO OF FS 3£ 28 CD 69 £3 '11 E710 09 31t F7 DF Fi 00 02 C8 E960 21 88 E2 CD 28
E4CB 20 00 19 Fl 3D 20 F2 C9 £718 Ei' 3A F6 'OF FE 01 28 SC E968 E6 11 05 01 21
£4DO CD 83 E2 3E 05 32 FF DF E720 2A F4 DF 22 01 00 40 3E E970 85 03 11 8B 0'1
ji;4D8 3:£ 00 32 00 EO 21 00 00 E7'28 20 11 02 02 CD 5A E6 01 ,£978 CD 85 03 11 05
11:4.EO 22 F9 OF 22 FB OF 22 f"D E730 11.8 DE 3E 28 23 11 02 01 :£990 06 CD 85 03 3E
E4E8 DF 3£ 13 32 65 EA 3£ OE> E738 CD SA E6 11 401 58 19 7£ E9se ES C3 DO £4 11
E4FO 32 09 EO 2.1 EO 02 22 OA E740 FE 20 CA C2 E7' FE 2B .28 E990 26 03 CD as 03 III
4528 S5 07 75 05 55 D7 75 7!l
4530 57 57 50 75 57 57 50 55
4538 55 57 50 55 70 07 07 07
4540 7D 50 70 50 50 FF 70 D'7
4..54.8 SD 75 f'F FO 57 FD 57 .FD
4550 50 7I) DD FF 50 iFF D5 70
4558 57 FD 7F D5 FD 07 70 Ff
45150 57 51} 75 75 7D 07 70 07
4568 7D 7F D7 7F 57 57 57 Sf
4.570 5f 57 SF SF SF SF D5 F5
4578 f!i D5 E"!i F5 FS F5 .sF SF
4580 57 57 57 57 57 57 F5 FS
4.588 05 05 05 D5 0.5 FO 55 55
4590 55 55 55 5,5 55 55 57 Sf
4.598 !:IF 57 5S 57 57 57 05 FS
4SA.0 F5 D5 55 55 55 fU 5,5 55
45M 5,5 .55 55 55 55 55 55 55
4590 55 55 55 55 55 S5 FO 55
4588 57 5D 75 1)5 75 S5 55 55
45CO 05 75 50' 50 SF 55 55 55
45C8 5.5 55 55 55 55 55 5,5 55
45,DO 55 55 57 SF SF 57 55 55
4508 55 5.5 05 F5 F5 D5 55 57
01.5[0 57 57 FD 55 57 50 55 S5
45&8 55 FD 55 55 05 75 75 D5
,45FO 7:5 55 55 55 55 SS 50 5D
45FB Sf 55 55 5·5 55 55 55 55
4600 55 55 55 55 55 55 55 55
460B 55 55 57 5F !iF 57 55 55
·4610 55 55 05 £'5 F5 D5 55 55
,4,618 55 55 55 55 55 55 55 55
4620 55 55 5.5 55 55 55 55 57
,4628 57 57 FD 5S. 57 !iD 55 S.S
4630 55 rn 55 55 05 75 55 5.5
4638 55 55 35 55 55 55 55 55
4540 55 55 55 5.5 55 55 75 D5
'464B 7.5 5.5 55 ~5 55 55 5D 50
4.650 SF 55 55 55 55 55 55 55
·4658 55 55 5S !)S 55 55 57 SF
,4660 7F FF FF FF 7F SF F5 FO
466B FE FF FF FO F5 05 55 55
,4670 55 55 55 55 55 55 SF IF
<1678 FF FF FF 7F SF 57 05 F5
,4.680 FD FF FF FF FD F5 55 55
4:688 55 55 55 55 55 55 SD 57
4690 S5 55 5.5 55 55 55 50 75
,4698 D5 05 05 D5 05 05 57 SF
,46110 70 7r 7F SF 5' 57 05 F5
46M FD FD FO F5 05 D5 57 57
,4680 55 55 55 55 55 55 D5 05
,4.686 [5 FS 7D 7'D SF SF 55 50S
,46CO 55 55 57 57 5F SF 70 7D
,46C8 F5 FS 05 05 55 55 70 7D
46DO F!l FS 70' 7D 5F 5ol' 55 55
-t60B 7.0 SF 7D F5 05 05 55 55
461::0 AA .AA 56 56 AA AIr. 55 55
,46E6 M AA 95 95 /loA All 55 55
-t6FO .7F F.F FF rr 7F SF ai 15
'lors 7D FF FF FF FD FS 57 57
4700 57 5F SF SF SF 5F 55 55
,4708 5-" 05 05 D5 05 05 S.7 SF
4.710 7F SF SF SF 57 57 5,5 D5
4718 rs 05 05 05 55 55 AA AA
4720 ItA A6 99 6A AA AA AA M
4728 M 11.(\ A9 66 9'" AA, AA M
4730 M 61\ 91>, A6 A9 AA. AA AA
4.7 38 AA A6 99 6.A AI. AA. 00 05
4140 DO 010 00 00 00 00 06 .LD
4A38 BD 4,.\ CC B,E 04 21 10 BE
4.A40 42 68 C6 0'5 .BD 411. E6 8£
4MB 04 67 C6 0'6 BD 4A £6 8E
4,MO 05 61 C6 10 BO 411. £6 BE
-tASS 05 An C6 15 BO 41. E6 BE E99B 3C CS 97 32 00 EO 3A 6E 4,2EO 16 0.5 20 20 11 10 12 O§
EgAD E5 3D 32 6E ES 3iE 03 06 42E,8 01 04. 20 08 09 13 20 10
E9AS OS CD FC £9 C3 E9 £4 3A 4.2FD 09 03 OE 09 03 20 07 OF
E980 00 EO FE 02 30 01 G9 DO 421"8 OF 04 09 05 13 20 01 OC:
£988 21 06 EO 21 11.9 01 CD CIS 4300 DC .20 LO 20 OF 16 05 12
E9CO E9 21 71 01 CD CE £9 21 4308 20 0'1 :!o 12 OF 03 08, ][9
E9C'8 lA 01 CO CIE: E9 C9 E5 ED 4.310 20 as OD 02 01 DE 08 00
£900 SB OA EO ED 52. E:1, JS 01 431B as 'DE 14 2E 20 20 20 <!o
E908 C9 DO 7E 00 3C CB .A7 po 4J2O' 20 ;10 20 20 20 17 09 OC
E9EO 77 00 DO 23 FE 07 3D 01 432[l De 09 O!J 20 13 05 14 D
E9.EB C9 01 8B OF 16 28 FE OF 4]30 20 OF 06 06 20 l4 OF 20
E9FO 20 05 OlL 00 30 16 20 7A 4338 11 05 03 OC 01 09 00 20
E9FB CD 69 E3 C9 DO 21 F9 OF <1340 Oij 09 J 3 20 DC O~ 13 14
EAOO 16 00 SF DO 19 DD E5 GO 4.318 20 ] 0 O~' 1] J 3 05 U 13
EAOS 1.2 lEA 00 EA 10 F' CD 39 4350 09 OF DE 13 2C 02 15 14
EAIO E6 C9 DO E7 00 3C FE OA 4358 20 09 13 20 09 01 OD' 10
EA18 2.0 09 3E 00 DO 77 00 OD 4360 G5 12 03 04 02 19 20 ()6
EA20 28 18 EF DO 77 00 C9 00 43,68 01 oc OC 09 OE 07' 20 02
EA28 00 00 00 00 00 00 00 00 4370 OF ;1.5 DC 04. 05 12 13 2C
EA30 0,0 00 00 00 00 00 00 00 4378 10 OF 14 20 OS OF OC 05
EI'\38 00 00 00 01) 00 00 00 00 4380 13 2C 2Q 20 01 OE 04 20
EA40 00 00 00 DO 00 00 00 00 4388 16 09 03 09 OlF 15 13 20
EA48 00 00 00 00 00 00 00 00 4390 13 aE 01 OB 05 13 2£ 14
EASD 00 00 DO' 00 00 00 00 00 439B, OF 20 OD 01 OB 05 20 20
EASS 00 00 00 00 00 00 00 00 43AO 20 20 20 20 00 01 14 l<l.
EA60 DO 21 OF EO 06 1.3 CS DO '13M 05 12 13 20 1.7 OF 12 13
I!:A6,8 56 01 DO SE 00 DO 66 03 4JaO 05 20 14 08 05 20 14 09
EA70 DID 6!E 02 DO BS CD 85 03 4.Jsa 04 as 20 09 13 20 12 09
EA78 DO E1 11 04 00 DO 1'9 C1 43CO 13 09 OE 07 01 ae: 04 to
BA.BO 10 E4 C9 00 00 00 00 00 43CB 06 05 20 09 13 20 09 OE
4300 20 Oil 01 O[ 07 as 12 20
ij 4308 OF 06 2() 02 05 09 OE 07
43[0 20 03 15 14 OF 06 06 2E
43E6 1'1 OF 20 08 as oC 10 20
Voce jei deve tev observado que a ro- 4JIF0 17 09 ac OC 09 05 .20 09
43FB, OE ~o OB 09 1] 20 11 15
tina da rmisica funciona independente- 44.00 OS 13 14 20 12 05 01 04
mente de qualquer outra e foi montada 44,0'8 20 14 08 OS 20 06 OF oc
distante do programa principal Isso Ilia 44.10 11C OF 17 09 DE: 07 20 01
interfere com 0 Assembler de INPUT, 441~ DE 04 20 10 12 05 13 13
mas,se voce usou outre mantador, po- 4420 20 27 13 27 14 OF 20 13
dena descobrir que a latina da musica '1.4' 2 S 1'1 01 12 H 21:: OE: 20 20
esta aa re.giao de merndria ocupada pe- 4430 20 20 2D 21l 12 15 OE 00
4436 20 20 20 2.0 2D 20 16 CIS
10 proprio Assembler. Nesse caso, 'co- <l.HO 12 14 09 0,3 01 OC 20 OA
loque uma nova origem na rotina da 44.48 15 OD 10 02 0,1:"' 14 08 20
rmisica, 'rente usaf 24000 em vez de 44.50 20 20 (l4 09 01 07 OF OE
30000 - e n:io se esqueca de mudar as 4.45B 01 DC 20 OA I!'. 00 10 23
deelaracoes EQU e as instrucoes ,JSR 4460 23 23 2.1 23 .2] 21 23 23
3000() •. para que 0 processador va para <1468 23 21 .23 23 21 23 23 23
o neveendereco inieial Quando a roti- 4'170 23 21 23 23 Zl 23 23 21
na da musica fol:' chamada. 4.4713 23 23 23 21 23 23 21 21
Use 0 monitor de c6digo de nu\qui- 4480 55 54 50 50 40 4.0 00 GO
do computador ler (com 4488 7F SF 57 07 F5 FF OS 75
na seu para 4.490 DU 77 50 DS 7D 75 SO 77
PEEK) a memoria e veriflear se ela.con- <1498 1"5 FD ~7 75 DO 77 50 05
fere com a listagem hexa dada a seguir, 44AO 1"0 SF 57 07 ~D Pi' D5 7F
44AB 75 77 FO F7 D5 50 75 77
4268 03 OC 09 06 06 08 01 OE HBO ·55 05 D5 50 50 07 r s 70
4.270 07 OS 12 03 12 05 01 14 4458 D5 5D 50 07 ~5 57 F.F 7F
4278 05 01 20 02 19 20 01 2E 44eo 57 !>7 FD rD 5,5 75 D5 55
42BO 1J4 OIF 05 17 12 09 H 14 44CS 55 75 05 55 75 75 D5 05
428a 05 01£ 20 02 19 20 13 2£ o14DO 50 5D 05 D5 50 50 07 55
4.290 OB 05 OC OC ro1 17 01 19 44D8 57 50 07 5D D5 05 So 50
4298 01 OE 04 20 07 2E 08 05 <totEO 75 07 DO 7.5 7'D 50 75 05
UAO 04 (Ie 015 19 20 01 06 14 4.4E8 50 75 50 07 57 75 5D 50
42A8 IJS 12 20 01 20 ll.3 0,6 OF' 44.EO FS os 5.7 75 5,D D5 S7 7S
4280 12 14 2:0 17 01 OC OB 20 44..F8,57 55 55 07 FI' 55 55 00
4288 17 09 DC OC 09 05 20 20 <1.5<00 57 55 55 D5 77 55 55 OF
4.2CO 20 20 20 20 12 05 14 05 'I50B D5 05 57 55 50 05 57 7F
42ea 12 DE 13 20 14, OF 20 06 4.510 f5 75 50 55 57 75 50 F5
42DO 09 OE 04. 20 14 06 05 20 45HJ :'7 5.0 75 5F 5D 57 07 55
4. :.!DB· 07 Of 01 14 13 20 DB 01 4.520 75 75 57 5.5 5S. 77 75 05 4A50 05 C7 C6 OC SD 4.A E6 86 1CA8 SA 26 D7 35 36 39 C5 05
1A68 05 BE FF FF ]0 11" 26 FC 4CBO 3D C3 45 3C 1F 01 34 20
1A70 4.A 26 F6 BD 4A CC 8E 04 <tCBS C6 05 A6 60 34 02 84. OF
4.A76 00 10 8E 4.2 A4. SF BD 4A <lCCO 48 4.8 4.8 48 8A 05 A7 21
'!.A80 E6 C6 B9 BD 4A £6 )0 B8 4CC8 35 02 44- 4.4. 44 44 8A 50
4.ABB 18 C6 OA BD 1A E6 30 88 4CDO A7 A.4 31 AS 20 5A 26 Ei:
4A90 16 C6 14 BD 4A E6 30 OC 4CD8 35 20 31 22 20 C6 CE 4.7
>tA98 C6 14. BD 4.1>. £6 BD 80 06 4(;EO lE 86 47 46 85 02 27 03
4.AAO 81 53 26 F9 39 BO 1A EE 4CEB ct <t7 2E BE 4.7 47 86 10
4.AAB BD 4.A 09 9E 15 FE 10 8E 4<:FO 3<t li2 SO 4.B CA 3S 42 4.A
4ABO 44 SF C6 20 Jot 04 BD 4.1>. 4.CF8 26 F6 7A 47 46 26 OF 86
4AB8 YO BO 413 12 35 04. SA 26 41)00 OJ>. 67 4.7 46 BE 47 4.7 30
4.ACO F3 10 8E 44 C4 8E 06 21 4.D08 89 FF 00 BF 47 47 39 7A
41>.C8 DO 4B 43 39 8E 04 00 86 4D10 47 52 26 30 86 05 27 '1.7
4_ADO 80 1>07 BO 8C 06 00 25 F9 4018 52 13 8E 06 21 86 IE J4
4ADB 39 8E 05 00 86 55 A7 80 41)20 02 85 02 lC FE ]4 01 SF
4AB3 8C 1E 00 25 F9 39 A6 AD 4028 35 01 66 85 34 01 5C Cl
4.A£8 A7 80 5A 26 F9 39 86 &5 4.030 8E 26 F5 68 B<t 35 01 66
4.MO B7 FF 22 B7 FF C3 87 H 4D38 84 4.A 26 E7 30 8B 20 35
4MB C5 B7 FF C7 39 34 30 BE 4040 02 4A 26 DB 39 86 47 3E
4800 06 00 10 BE 06 01 A6 AD 4D4.8 27 05 Bl 03 27 01 39 BE
4.B08 A7 80 8e 10 FF 25 1"7 35 4.D50 47 <to CE 06 00 34 10 SO
4BI0 30 39 34 10 A6 M 80 21 4D58 4B CA 35 10 30 IF BC 14.
481S 25 lC ]5 10 30 89 fF 00 '1060 EO 27 48 'U' 47 4.D A6 8<t
4820 3'1. 10 34 20 10 BE 44 80 4D58 81 AA 27 42 81 55 27 09
4828 C6 08 A6 M A7 84 30 88 4070 81 50 27 OS 86 02 27 47
4.BJO 20 SA 26 Fo 35 20 6F 84 4.D78 4C 30 89 01 21 1>.6 84 Bl
4B38 )0 88 20 8C 1£ 00 25 F6 'iD80 AA 27 2B 81 55 26 06 30
48'iO 35 10 39 C6 IE 34. 04 Co 4D88 88 OF BF 4.7 4.0 86 47 54
4B48 04 A6 AD A7 gO SA 26 1"9 '1.090 27 02 BE 4.7 40 CE 46 76
4.850 )0 88 lC 35 04 SA 26 ED 4D98 SO "lB CA 7F 47 54 39 BE
4B58 39 a6 47 3E Co 10 30 C3 4DAO '17 '10 CE 4.6 5E SO 4B CA
4860 4.6 DE IF OJ 8E OA DE BD 4DM 86 01 97 '17 54 39 BE 47
4B68 4B CA B6 47 JE 27 DE 34 4DEO 4.0 CE 06 00 BD 4..B CA BE
4B/O 02 SO 4B 7E 35 02 81 01 4088 OB FE BF 4.7 40 39 Fe 47
41178 27 03 BD 48 ':)A 39 8E 13 40CO 49 C4 IF Cl IE 26 05 86
4B80 E7 CE OB Ff BD 48 B6 8£ 4DC8 01 B7 47 4.C B6 47 55 10 4.EfO CE 45 CE BD 4B CA ]0 89
4.S88 11 EF ct: 08 FF BD 48 B6 4000 25 00 09 BE 47 49 30 89 4.EFB 00 FE BD 4B CA 30 89 00
4.B90 BE OE F9 CE OB FF 110 48 4DD8 02 20 AE 84 BC 55 55 10 4.FOO FE BD 4.B CA 39 81 03 26
4B98 86 39 8E 13 E7 CE 46 9E 4DEO 27 00 BE BC AA AA 10 27 4FOB 2F 7C 47 55 BE 47 49 30
4.BAO BD 48 B6 BE 11 EF CE 4.6 40£8 00 S4. BC SF FS 10 27 00 4.no 89 F'F 00 CE 06 00 SO 4..B
4BAB 9£ SD <t"B 86 8E OE 0'9 CE 40):'0 AD SF 7F 47 58 86 SF B7 4F18 CA 30 89 00 FE CE 46 06
4.BBO 46 9E DO 4._8 86 39 C6 04 4.0F8 FF 02 86 H 00 B7 47 56 4F20 BD 4B CA 30 89 00 FE CE
4.BB8 34. 54. BO 4B CA 35 54 )0 4EOO 86 OF B7 FF 02 B6 FF 00 4F28 46 26 BD 4B CA 30 89 00
4BCO 89 01 00 33 C8 10 5A 26 4E08 B7 47 57 81 FO 26 1A C6 4FJC FE CE 46 46 BD 4.B CA 39
4BCB EF 39 C5 02 34 14 C6 08 4E10 01 96 47 56 81 FD 25 02 4F38 81 04. 26 25 7F 4.7 55 BE
4BOO 37 02 A7 84. 3D 88 20 SA 4£18 cs 81 F7 4.7 55 86 4.7 58 4.F<lO 47 49 34 10 CE 06 00 SO
4.B08 26 1;6 35 14 ]0 01 SA 26 4E20 26 15 BE 4.7 49 ]4 10 20 4F48 4B CA 35 10 30 89 01 00
4BEO EB 39 BO 4.A 38 86 05 B7 4E28 JC B~ 47 56 81 FO 26 EA 4FSO BF 47 4.9 CE 45 6E: BD 4.B
4BE8 47 3F 71" 4.7 3E 8E 'i7 4.0 4E30 86 01 B7 <t7 58 20 E3 BE 41"58 CA 30 89 00 FE SO 4B CA
4BFO C5 06 6£ 80 SA 25 FB 86 4E38 47 49 CE 06 00 SO 4B CA 4F60 39 81 81 26 ]0 7C 47 55
4Brs 06 B7 47 46 8E ID 00 BF 4E40 30 89 00 n: BD 4.8 CA BI;: "I.F68 BE 47 49 30 89 01 22 A6
4COO 47 4.7 8E 13 EO SF 47 4_9 4.E48 47 49 30 01 34 10 ]0 89 4F70 84 81 57 10 27 FF 27 SO
4C08 71" 47 4B 7F 47 4C 8E OB '1E50 01 61 A6 B4. 81 05 07 44 4.F78 50 31" BE 4.7 4.9 30 89 FF
4ClO FE BF 47 4D 7F 47 4.1" 86 4E58 81 FF 27 4.0 81 50 27 44 4.F80 01 BF <t7 49 CE <t5 96 BD
4.C18 05 B7 4.7 50 85 OA 87 4.7 "lE60 B6 47 4B 27 16 AE E4. CE 4F88 48 CA 30 89 00 FE CE 4.5
4C20 51 BD 4.A A5 8E 07 OF CE 4E68 45 C"E BD 4B Cl> AI E4 30 41"90 B6 BD 4.8 CA 39 81 82 26
4C28 44 88 c6 05 86 0] 37 20 4E70 89 01 00 BD 48 CA 7F 47 4F98 4.0 7C 4.7 55 BD 50 3F BE
4C30 10 AF 81 4.1>. 26 FB 30 88 4E78 4B 20 19 A£ E4. CE 45 96 4FAD 47 49 ]0 89 FF 01 BF 47
4C3a 1A 5A 26 FO 80 4C 77 8E 4£80 BD 4.B CA 1>.E E4. 30 89 01 4FAB 4.9 CE 45 CE BD 48 CA 30
4C4.0 08 OF CE 44. 1.6 C6 05 86 4E88 00 CE 45 86 BD 4.8 CA 85 4F80 89 00 FE BD 4B CA 30 89
4C48 03 37 20 10 1>.f 81 4A 26 41::90 01 B7 4.7 4B AE E4. Bf 47 4F88 00 FE BD 48 ell. BE 4.7 4.9
4C50 F8 30 88 1A SA 26 1"0 86 4E98 49 35 10 39 35 10 86 02 4FCO 30 89 03 60 A6 80 81 FF
4C58 47 3F Ct) 05 3D C3 45 ]C 4EAO 87 47 4C 39 35 10 30 IF 4FC8 27 07 A6 84. 81 fF 27 01
4C60 IF 03 8E 08 16 C6 05 37 4£A8 34 10 20 89 BD 51 6F S6 4FOO 39 86 04 C6 05 so 51 OF
4C68 02 1>.7 84 30 88 20 SA 26 'lEBO 4.7 55 81 01 26 2C 7C47 4.1"08 39 SI 83 26 28 7C 47 55
4e70 F6 BO 75 30 7£ 51 C4 34 4EB8 55 BE 47 49 34 10 )0 89 4FEO BD 50 3F 30 89 00 FE CE
"iC78 36 8£ 47 40 C6 06 10 8E "lECO 01 00 CE 06 00 BD 4B CA 4FE8 06 00 SO 4B CA BE 47 49
4.C80 07 16 A6 84. 34 14. C5 01 4Ee8 ]5 10 30 89 FF 00 BF 47 4.FFO 30 89 01 01 BF 47 49 CE
(CS8 26 24 C6 05 3D C3 45 3<': 4£00 49 CE 4.5 96 BD 4B CA 30 "1FF8 45 96 BD 48 C1>. 30 89 00
<IC90 IF 01 34 20 C6 05 A6 80 4£D8 89 00 FE CE 45 B6 so 46 5000 FE CE 45 86 so <lB CA 39
4C98 A7 A4 31 A8 20 5A 26 F6 4EEO CA 39 81 02 26 IF 7C 47 5008 81 84 26 1C BO 50 3F BE
'\CAO 35 20 31 21 35 l4, 30 01 'iEES 55 BE 47 49 30 89 FF 00 5010 47 49 34 10 30 89 02 00

Você também pode gostar