Revista MSX Micro 07
1986
Programas: Arquivo Eletrônico, Ataque Atômico, Recuperação de Programas BASIC
Jogos: Shark Hunter, Track & Field II.
Arquivo Eletrônico
Artigo Orignal: MSX Micro, Digitação: Wilson Pilon
Este programa, apesar de chamar-se Arquivo Eletrônico, é um conjunto de programas que visa auxiliar os hobbystas de Eletrônica em seus projetos.
Se você estuda Eletrônica ou gosta de fazer aquelas montagens divulgadas em revistas especializadas, este programa lhe será de muita utilidade.
O leitor resumiu em um único programa, vários tópicos necessários a quem se interessa pelo assunto.
Vejamos
Referência de Listagem
Listagem | Arquivo |
---|---|
Listagem Única | eletro.bas |
Listagem
5 CLS:LOCATE7,10:PRINT"Digite seu nome "; 6 INPUTZ$ 20 COLOR 1,11,11:SCREEN2,2:FORF=1TO16:READK$:S$=S$+CHR$(VAL("&b"+LEFT$(K$,8))):NEXT:RESTORE:FORF=1TO16:READK$:S$=S$+CHR$(VAL("&b"+RIGHT$(K$,8))):NEXT 30 SPRITE$(1)=S$:FORF=191TO40STEP-1.1:PUTSPRITE0,(F+30,F+F+10),6,1:PUTSPRITE1,(50,F),2,1:PUTSPRITE2,(F+10,F),13,1:PUTSPRITE3,(F+10,138),1,1:PUTSPRITE4,(F+10,F+98),4,1:NEXT:P=P+1:IFP>1THEN30 40 OPEN"grp:"FOROUTPUTAS#1:PSET(68,47),11:PRINT#1,"Baptista Producoes" 50 FORF=2TO18STEP2:LINE(27+F,41-F)-(235-F,75-F),13,B:NEXT:PSET(97,97),11:PRINT#1,"Apresenta":FORF=2TO18STEP2:LINE(27+F,139-F)-(235-F,173-F),12,B:NEXT:PSET(68,144),11:PRINT#1,"Arquivo Eletronico":P=0:FORF=1TO2000:NEXT 70 DATA 1100001100000000 80 DATA 1110011100000000 90 DATA 1101101100000000 100 DATA1100001100000000 105 DATA1100001100000000 110 DATA0000011111110000 120 DATA0000100000000000 130 DATA0000011111110000 140 DATA0000000000011000 150 DATA0000011111110000 160 DATA0000000001100011 170 DATA0000000000110110 180 DATA0000000000001000 190 DATA0000000000010100 200 DATA0000000000110110 210 DATA0000000001100011 220 DATA 66,65,80,84,74,82,84,65 230 POKE64683!,1:SCREEN3,3:COLOR15,1,1:FORD=0TO7:COLOR D+3:PRESET(90,75):CLS:PRINT#1,7-D:PLAY"v9f7":FOR S=0TO 550:NEXT:NEXT:CLOSE 240 SCREEN0:KEYOFF:FORJ=1TO3 250 PRINTCHR$(23):FORI=1TO4:PRINT:NEXT 260 PRINT" Arquivo Eletronico":PRINT:PRINT:PRINT 270 PRINT" Jose Baptista da Silva" 280 PRINT:PRINT:PRINT" >>>>1986<<<<" 290 FORK=1TO600:NEXT:NEXT 300 CLS:LOCATE11,1:PRINT "Arquivo Eletronico" 310 LOCATE 0,5:PRINT"Instrucoes":PRINT 320 B$="Os artigos contidos neste arquivo sao deinteira responsabilidade do autor domesmo Sr. Jose Baptista." 330 A$=" O usuario destedevera seguir com o maximo rigor,as ins-trucoes dadas durante a execucao do programa. 340 B=LEN(B$):FORI=1TOB:X$=MID$(B$,I,1):PRINTX$;:FORJ=1TO15:NEXT:NEXT 350 A=LEN(A$):FORI=1TOA:X$=MID$(A$,I,1):PRINTX$;:FORJ=1TO15:NEXT:NEXT:LOCATE7,20:PRINT"Press algo para continuar":A$=INKEY$:IFA$=""THEN350 360 REM *** ONERRORGOTO 5480:CLS:PLAY"cdefgabr2","l8cdefgabr2" 361 CLS:PLAY"cdefgabr2","l8cdefgabr2" 370 PLAY"t240l6v12","t240l2v9" 380 PLAY"r8o6gabo7dcceb","o4go5ge" 390 PLAY"dg#gdo6bgab","o4bo5eo4e" 400 CLS:LOCATE11,1:PRINT"ARQUIVO ELETRONICO":PRINT:PRINT 410 A$="(A) Portas Logicas Digitais (B) Decodificador de Cores (C) Calculo de Resistencia (D) Resistencia Equivalente (E) Conversor DEC,BIN,HEX." 420 B$=" (F) Polarizacao de Transistores (G) Projeto com Amp. OP CI 741 (H) Calculos de Capacitores (I) Reatancia Capacitiva (J) Reatancia Indutiva (K) Projeto com o Temp. CI 555" 430 A=LEN(A$):FORI=1TOA:X$=MID$(A$,I,1):PRINTX$;:FORJ=1TO5:NEXT:NEXT 440 B=LEN(B$):FORI=1TOB:X$=MID$(B$,I,1):PRINTX$;:FORJ=1TO5:NEXT:NEXT 450 LOCATE 6,20:PRINT"Qual o Item Desejado ?" 460 Y$=INKEY$:IF Y$=""THEN460 470 IFY$="A"GOTO590 480 IFY$="B"GOTO2900 500 IFY$="C"GOTO1940 510 IFY$="D"GOTO2020 520 IFY$="E"GOTO4770 530 IFY$="F"GOTO2170 540 IFY$="G"GOTO2290 550 IFY$="H"GOTO2540 560 IFY$="I"GOTO2710 570 IFY$="J"GOTO2820 580 IFY$="K"GOTO5150ELSE460 590 CLS:LOCATE14,4:PRINT"(1) Porta AND":LOCATE14,6:PRINT"(2) Porta OR":LOCATE14,8:PRINT"(3) Porta NOR":LOCATE14,10:PRINT"(4) Porta NAND":LOCATE14,12:PRINT"(5) Porta OR-EX" 600 LOCATE 10,18:PRINT"Press o Item Desejado?" 610 X$=INKEY$:IFX$=""THEN610 620 IF X$="1"THEN670 630 IF X$="2"THEN840 640 IF X$="3"THEN1010 650 IF X$="4"THEN1350 660 IF X$="5"THEN1690ELSE610 670 CLS:LOCATE5,1:PRINT"Tabela Verdade da Porta AND" 680 LOCATE 0,4:PRINT"Voce devera indicar as duas variaveislogicas, A e B" 690 LOCATE 10,7:PRINT"A AND B S" 700 LOCATE13,12:PRINT"" 710 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A1:LOCATE9,11:PRINT;A1 720 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B1:LOCATE19,11:PRINT;B1:S1=A1ANDB1:LOCATE25,11:PRINT;S1 730 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"In de Dados ";A2:LOCATE 9,12:PRINT;A2 740 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B2:LOCATE19,12:PRINT;B2:S2=A2ANDB2:LOCATE25,12:PRINT;S2 750 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"In de Dados ";A3:LOCATE 9,13:PRINT;A3 760 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B3:LOCATE19,13:PRINT;B3:S3=A3ANDB3:LOCATE25,13:PRINT;S3 770 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"In de Dados ";A4:LOCATE 9,14:PRINT;A4 780 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B4:LOCATE19,14:PRINT;B4:S4=A4ANDB4:LOCATE25,14:PRINT;S4 790 LOCATE 8,17:PRINT"Gostou do resultado [S]im [N]ao [F]im" 800 W$=INKEY$:IFW$=""THEN800 810 IFW$="S"THEN590 820 IFW$="N"THEN670 830 IFW$="F"THEN360ELSE800 840 CLS:LOCATE5,1:PRINT"Tabela da Verdade da Porta OR" 850 LOCATE 0,4:PRINT"Voce devera indicar as duas variaveis loficas. A e B" 860 LOCATE 10,7:PRINT"A OR B S" 870 LOCATE13,12:PRINT"" 880 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A1:LOCATE9,11:PRINT;A1 890 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B1:LOCATE19,11:PRINT;B1:S1=A1ORB1:LOCATE25,11:PRINT;S1 900 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"In de Dados ";A2:LOCATE 9,12:PRINT;A2 910 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B2:LOCATE19,12:PRINT;B2:S2=A2ORB2:LOCATE25,12:PRINT;S2 920 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"In de Dados ";A3:LOCATE 9,13:PRINT;A3 930 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B3:LOCATE19,13:PRINT;B3:S3=A3ORB3:LOCATE25,13:PRINT;S3 940 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"In de Dados ";A4:LOCATE 9,14:PRINT;A4 950 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B4:LOCATE19,14:PRINT;B4:S4=A4ORB4:LOCATE25,14:PRINT;S4 960 LOCATE 8,17:PRINT"Gostou do resultado [S]im [N]ao [F]im" 970 W$=INKEY$:IFW$=""THEN970 980 IFW$="S"THEN590 990 IFW$="N"THEN840 1000 IFW$="F"THEN360ELSE970 1010 CLS:LOCATE5,1:PRINT"Tabela da Verdade da Porta NOR" 1020 LOCATE 0,4:PRINT"Voce devera indicar as duas variaveis loficas. A e B" 1030 LOCATE 10,7:PRINT"A NOR B S" 1040 LOCATE13,12:PRINT"" 1050 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A1:LOCATE9,11:PRINT;A1 1060 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B1:LOCATE19,11:PRINT;B1:GOSUB1130:LOCATE25,11:PRINT;S1 1070 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A2:LOCATE9,12:PRINT;A2 1080 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B2:LOCATE19,12:PRINT;B2:GOSUB1130:LOCATE25,12:PRINT;S2 1090 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A3:LOCATE9,13:PRINT;A3 1100 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B3:LOCATE19,13:PRINT;B3:GOSUB1130:LOCATE25,13:PRINT;S3 1110 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A4:LOCATE9,14:PRINT;A4 1120 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B4:LOCATE19,14:PRINT;B4:GOSUB1130:LOCATE25,14:PRINT;S4:GOSUB 1300 1130 IFA1=0ANDB1=0THENS1=1 1140 IFA1=0ANDB1=1THENS1=0 1150 IFA1=1ANDB1=0THENS1=0 1160 IFA1=1ANDB1=1THENS1=0 1170 IFA2=0ANDB2=0THENS2=1 1180 IFA2=0ANDB2=1THENS2=0 1190 IFA2=1ANDB2=0THENS2=0 1200 IFA2=1ANDB2=1THENS2=0 1210 IFA3=0ANDB3=0THENS3=1 1220 IFA3=0ANDB3=1THENS3=0 1230 IFA3=1ANDB3=0THENS3=0 1240 IFA3=1ANDB3=1THENS3=0 1250 IFA4=0ANDB4=0THENS4=1 1260 IFA4=0ANDB4=1THENS4=0 1270 IFA4=1ANDB4=0THENS4=0 1280 IFA4=1ANDB4=1THENS4=0 1290 RETURN 1300 LOCATE 8,17:PRINT"Gostou do resultado [S]im [N]ao [F]im" 1310 W$=INKEY$:IFW$=""THEN1310 1320 IFW$="S"THEN590 1330 IFW$="N"THEN1010 1340 IFW$="F"THEN360ELSE1310 1350 CLS:LOCATE5,1:PRINT"Tabela da Verdade da Porta NAND" 1360 LOCATE 0,4:PRINT"Voce devera indicar as duas variaveis loficas. A e B" 1370 LOCATE 10,7:PRINT"A NOR B S" 1380 LOCATE13,12:PRINT"" 1390 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A1:LOCATE9,11:PRINT;A1 1400 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B1:LOCATE19,11:PRINT;B1:GOSUB1470:LOCATE25,11:PRINT;S1 1410 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A2:LOCATE9,12:PRINT;A2 1420 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B2:LOCATE19,12:PRINT;B2:GOSUB1470:LOCATE25,12:PRINT;S2 1430 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A3:LOCATE9,13:PRINT;A3 1440 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B3:LOCATE19,13:PRINT;B3:GOSUB1470:LOCATE25,13:PRINT;S2 1450 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A4:LOCATE9,14:PRINT;A4 1460 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B4:LOCATE19,14:PRINT;B4:GOSUB1470:LOCATE25,14:PRINT;S2 1470 IFA1=0ANDB1=0THENS1=1 1480 IFA1=0ANDB1=1THENS1=1 1490 IFA1=1ANDB1=0THENS1=1 1500 IFA1=1ANDB1=1THENS1=0 1510 IFA2=0ANDB2=0THENS2=1 1520 IFA2=0ANDB2=1THENS2=1 1530 IFA2=1ANDB2=0THENS2=1 1540 IFA2=1ANDB2=1THENS2=0 1550 IFA3=0ANDB3=0THENS3=1 1560 IFA3=0ANDB3=1THENS3=1 1570 IFA3=1ANDB3=0THENS3=1 1580 IFA3=1ANDB3=1THENS3=0 1590 IFA4=0ANDB4=0THENS4=1 1600 IFA4=0ANDB4=1THENS4=1 1610 IFA4=1ANDB4=0THENS4=1 1620 IFA4=1ANDB4=1THENS4=0 1630 RETURN 1640 LOCATE 8,17:PRINT"Gostou do resultado [S]im [N]ao [F]im" 1650 W$=INKEY$:IFW$=""THEN1650 1660 IFW$="S"THEN590 1670 IFW$="N"THEN1350 1680 IFW$="F"THEN360ELSE1650 1690 CLS:LOCATE5,1:PRINT"Tabela da Verdade da Porta OR-EX" 1700 LOCATE 0,4:PRINT"Voce devera indicar as duas variaveis loficas. A e B" 1710 LOCATE 10,7:PRINT"A OR-EX B S" 1720 LOCATE13,12:PRINT"" 1730 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A1:LOCATE9,11:PRINT;A1 1740 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B1:LOCATE19,11:PRINT;B1:S1=A1XORB1:LOCATE25,11:PRINT;S1 1750 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A2:LOCATE9,12:PRINT;A2 1760 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B2:LOCATE19,12:PRINT;B2:S2=A2XORB2:LOCATE25,12:PRINT;S2 1770 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A3:LOCATE9,13:PRINT;A3 1780 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B3:LOCATE19,13:PRINT;B3:S3=A3XORB3:LOCATE25,13:PRINT;S3 1790 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";A4:LOCATE9,14:PRINT;A4 1800 LOCATE8,17:PRINTSTRING$(20," "):LOCATE8,17:INPUT"IN de Dados ";B4:LOCATE19,14:PRINT;B4:S4=A4XORB4:LOCATE25,14:PRINT;S4 1810 LOCATE 8,17:PRINT"Gostou do resultado [S]im [N]ao [F]im" 1820 W$=INKEY$:IFW$=""THEN1820 1830 IFW$="S"THEN590 1840 IFW$="N"THEN1690 1850 IFW$="F"THEN360ELSE1820 1940 CLS:LOCATE5,11:PRINT"Este programa calcula a frequencia de um filtro ressonante LC":FORT=1TO2500:NEXT:ONERRORGOTO 5480 1950 CLS:COLOR 1,3:LOCATE 5,2:PRINT "Calculo de Frequencias" 1960 PRINT:PRINT"Qual o valor de L";:INPUTL:PRINT:PRINT;"L =";L;"mH"; 1970 PRINT:PRINT:PRINT;"Qual o valor de C ";:INPUTC:PRINT:PRINT;"C =";C;"F" 1980 LETF=1/(6.283*SQR(L*C)):PRINTTAB(44);"A frequencia central ";CHR$(234);":":PRINTTAB(44);"F=";F;;"Hz":PRINTTAB(122);"Novos Calculos << Sim ou Nao >>"; 1990 G$=INKEY$:IFG$=""THEN1990 2000 IFG$="S"THEN1950 2010 IFG$="N"THEN360ELSE1990 2020 CLS:LOCATE4,11:PRINT"Este programa calcula a resistenciaequivalente de uma associacao em serieou paralelo":FORS=1TO3000:NEXT:ONERRORGOTO5480 2030 COLOR1,11:CLS:LOCATE5,1:PRINT"Resistencia Equivalente" 2040 RX=0:RS=0:PRINTTAB(43);"Qual o numero de resistores";:INPUTX:PRINTTAB(5);"Total=";X;"resistores":FORM=1TOX:PRINTTAB(4);"Qual o valor de R";M;:INPUTA(M) 2050 PRINTTAB(5);"r=";A(M);"":NEXTM:PRINTTAB(44);"Calcular em [S]erie ou [P]aralelo":PRINT 5480 END
Ataque Atômico
Artigo Original: MSX Micro, Digitação: Wilson Pilon
Sua cidade está sob pesado ataque de mísseis atômicos do espaço exterior. Sua única chance (e da cidade também) de sobreviver é conseguir derrubar os mísseis, antes que atinjam a cidade. Para isso, você deverá usar as teclas do cursor ou do joystick 1, para direcionar suas baterias de laser e a barra de espaço ou botão de tiro, para atirar. Se você conseguir derrubar todos os mísseis em um único nível, ganhará um bônus e passará para o nível seguinte. Boa sorte!
Referência de Listagem
Listagem | Arquivo |
---|---|
Listagem Única | ataque.bas |
Listagem
10 REM *** Missel Ataque *** 30 KEYOFF:DEFINTA-Z:COLOR14,1,1 40 OPEN"grp:"FOROUTPUTAS#1 50 HI=1000 60 DIMQ(50),W(50),DR(50),K(50) 70 GOSUB1810:REM Instrucoes 80 SC=0:N=6:HT=0:AH=0:YM=2:PM=3 90 GOSUB120:REM Draw Screen 100 GOSUB300 110 GOSUB460:REM Game 120 SCREEN2,0 130 FORI=0TO255 140 H=INT(RND(1)*10)+10 150 LINE(I,159)-(I,159-H),4 160 NEXTI 170 RESTORE220 180 B$="" 190 FORI=1TO8:READA$:A=VAL("&b"+A$):B$=B$+CHR$(A):NEXTI 200 SPRITE$(0)=B$ 210 RETURN 220 DATA 00001000 230 DATA 00001000 240 DATA 00001000 250 DATA 01110111 260 DATA 00001000 270 DATA 00001000 280 DATA 00001000 290 DATA 00000000 300 P=RND(-TIME) 310 LINE(120,139)-(137,149),1,BF 320 DRAW"c3bm123,149e5f5l10" 330 REM paint(128,146),3 340 BL=N+5 350 FORI=1TOBL:R=(I*4)+16:PRESET(R,162):PRINT#1,CHR$(217):NEXT 360 FORI=1TON:K(I)=1:Q(I)=INT(RND(1)*235)+12:W(I)=0:PSET(Q(I),W(I)),11:G=INT(RND(1)*2):IFG=0THENDR(I)=1:NEXTELSEDR(1)=-1:NEXT 370 X=128:Y=80 380 PUTSPRITE0,(X,Y),14,0 390 COLOR12 400 DRAW"bm12,182":PRINT#1,"Score=";SC 410 COLOR11 420 DRAW"bm120,182":PRINT#1,"High=";HI 430 RN=0 440 RETURN 450 REM Start Game 460 ONSTRIGGOSUB1070,1070 470 STRIG(C)ON 480 ONINTERVAL=5GOSUB570 490 INTERVALON 500 REM Main Loop 510 RG=INT(RND(1)*50) 520 IFRG<2ANDRE=0THENGOSUB780 530 IFRE=1THENGOSUB810 540 IFRE=0THENGOSUB930 550 GOTO510 560 REM Move Cross 570 S=STICK(C) 580 IFS=0THENRETURN 590 IFS=1THENY=Y-PM:GOSUB690:GOTO670 600 IFS=2THENX=X+PM:Y=Y-PM:GOSUB690:GOSUB710:GOTO670 610 IFS=3THENX=X+PM:GOSUB710:GOTO670 620 IFS=4THENX=X+PM:Y=Y+PM:GOSUB710:GOSUB730:GOTO670 630 IFS=5THENY=Y+PM:GOSUB730:GOTO670 640 IFS=6THENX=X-PM:Y=Y+PM:GOSUB750:GOSUB730:GOTO670 650 IFS=7THENX=X-PM:GOSUB750:GOTO670 660 IFS=8THENX=X-PM:Y=Y-PM:GOSUB750:GOSUB690 670 PUTSPRITE0,(X,Y),14,0 680 RETURN 690 IFY<0THENY=0 700 RETURN 710 IFX>246THENX=246 720 RETURN 730 IFY>120THENY=120 740 RETURN 750 IFX<10THENX=10 760 RETURN 770 REM Rogue Set Up 780 RN=RN+1:IFRN>4THENRETURN 790 RE=1:RM=PM+2:RX=INT(RND(1)*200)+27:RY=0:PSET(RX,RY),12:RETURN 800 REM Move Rogue 810 BEEP:RY=RY+RM:IFRY>138THENGOSUB860 820 RD=INT(RND(1)*2):IFRD=0ANDRX>12THENRX=RX-1ELSEIFRX<250THENRX=RX+1 830 IFRE=1THENPSET(RX,RY),12 840 RETURN 850 REM Rogue Hit City 860 GOSUB1410:FORI=1TO10:CIRCLE(RX,RY),I,INT(RND(1)*14)+2:NEXTI 870 RE=0:HT=HT+1 880 FORI=1TO10:CIRCLE(RX,RY),I,1:NEXT 890 BEEP 900 IFAG=1ANDAH=NTHENGOTO1460 910 RETURN 920 REM Move Missel 930 A=INT(RND(1)*N)+1 940 IFK(A)=0THENGOTO930 950 IFX<13ORX>253THENGOTO980 960 Z=INT(RND(1)*10) 970 IFZ<1THENDR(A)=DR(A)*-1 980 V=Q(A):Z=W(A) 990 W(A)=W(A)+YM 1000 IFW(A)>138THENGOTO1300:REM Hit City 1010 IFK(A)=0THENRETURN 1020 Q(A)=Q(A)+DR(A) 1030 IFQ(A)<12ORQ(A)>254THENDR(A)=DR(A)*-1 1040 LINE(V,Z)-(Q(A),W(A)),11 1050 RETURN 1060 REM Fire 1070 IFBL=0THENPLAY"m50v15t255o7s8f":RETURN 1080 G=X:H=Y 1090 PLAY"s14m1000f" 1100 LINE(128,143)-(G+4,H+3),13 1110 FORI=1TO7:CIRCLE(G+4,H+3),I,9:NEXTI 1120 IFRE=1ANDPOINT(RX,RY)=9THENRE=0 1130 FORI=1TON:IFK(I)=0THENGOTO1150 1140 IFPOINT(Q(I),W(I))=9THENGOSUB1230 1150 NEXTI 1160 FORI=1TO7:CIRCLE(G+4,H+3),I,1:NEXT 1170 LINE(128,143)-(G+4,H+3),1 1180 BL=BL-1 1190 J=((BL+1)*4)+16:LINE(J,162)-(J+6,170),1,BF 1200 IFAH=NANDRE=0THENFORI=1TO50:NEXT:GOTO1460 1210 RETURN 1220 REM Hit Missel 1230 K(I)=0:SC=SC+N:AH=AH+1:IFAH=NTHENAG=1 1240 LINE(60,182)-(119,190),1,BF 1250 INTERVALOFF 1260 DRAW"bm60,182":PRINT#1,SC 1270 INTERVALON 1280 RETURN 1290 REM Hit City 1300 K(A)=0 1310 GOSUB1410 1320 FORI=1TO10:CIRCLE(Q(A),W(A)),I,6:NEXTI 1330 HT=HT+1 1340 AH=AH+1 1350 FORI=1TO10:CIRCLE(Q(A),W(A)),I,1:NEXTI 1360 FORI=1TO500:NEXT 1370 BEEP 1380 IFAH=NTHENGOTO1460 1390 RETURN 1400 REM Explosion Sound 1410 SOUND0,0:SOUND1,5:SOUND2,0:SOUND3,13:SOUND4,255:SOUND5,15:SOUND6,30:SOUND7,0:SOUND8,16:SOUND9,16:SOUND10,16:SOUND1,0:SOUND12,5:SOUND13,0 1420 FORI=0TO30:NEXT 1430 SOUND12,56:SOUND13,0 1440 RETURN 1450 REM Finished Level 1460 STRIG(C)OFF:INTERVALOFF 1470 PUTSPRITE0,(X,Y),0,0 1480 LINE(0,0)-(255,139),1,BF 1490 LINE(60,182)-(119,190),1,BF 1500 COLOR3 1510 DRAW"bm60,30":PRINT#1,"Hit on City=";HT 1520 IFHT>4THENGOTO1650 1530 COLOR9 1540 DRAW"bm80,50":PRINT#1,"Bonus=";(N+10)+(BL*20) 1550 SC=SC+(N*10)+(BL*20) 1560 COLOR13 1570 DRAW"bm80,65":PRINT#1,"Score=";SC 1580 PLAY"l6t255s0m10000eecccecccffedr6r6ffeedr6r6ggffeeddcr6r6r6","l6t255v12o5cegecegeceo4bo5do4ao5cecceo4bo5do4ao5ceco4ao5co4bo5dcegec" 1590 FORI=1TO8000:NEXT 1600 N=N+1:AH=0:AG=0 1610 IFN/3=INT(N/3)THENYM=YM+1:PM=PM+1 1620 LINE(0,0)-(255,139),1,BF 1630 GOTO100 1640 REM Dead 1650 GOSUB1410:FORI=1TO30:CIRCLE(128,145),I,INT(RND(1)*14)+2:NEXTI 1660 FORI=1TO30:CIRCLE(128,145),I,1:NEXT 1670 BEEP 1680 COLOR6 1690 DRAW"bm75,50":PRINT#1,"Game Over" 1700 DRAW"bm80,65":PRINT#1,"Score=";SC 1710 IFSC>HITHENCOLOR7:DRAW"bm60,75":PRINT#1,"A new high score!":HI=SC 1720 LINE(160,183)-(250,190),1,BF 1730 DRAW"bm160,182":PRINT#1,HI 1740 PLAY"t220v15o5c2c4o4a#8a8o5c4f4e4c8c4c4c4o4a8a#8o5c4f4e4c4c4f4a8g8fac4d4d8cd4o4g4g4a4a#4o5c4o4a4f.." 1750 COLOR10 1760 DRAW"bm20,100":PRINT#1,"Press SPACE or FIRE to start" 1770 IFSTRIG(0)THENC=0:GOTO80 1780 IFSTRIG(1)THENC=1:GOTO80 1790 GOTO1770 1800 REM Instrucoes 1810 SCREEN0,,0:WIDTH40 1820 FORI=22TO0STEP-1 1830 LOCATE10,I:PRINTCHR$(175);"Missile Attack";CHR$(174) 1840 LOCATE10,I+1:PRINT" " 1850 NEXT I 1860 LOCATE1,3 1870 PRINT"Your city is being attacked by"; 1880 PRINT" aliens,who are dropping missles on"; 1890 PRINT" it. You mustuse your laser to dest"; 1900 PRINT"roy the missiles." 1910 PRINT:PRINT" Use the cursor keys or joystick to"; 1920 PRINT" po-sition the sights and then press "; 1930 PRINT" thespace bar or fire button to"; 1940 PRINT" shoot." 1950 PRINT:PRINT" You have a limited amount of lasers"; 1960 PRINT" andit only takes five hits to "; 1970 PRINT" destroy thecity." 1980 PRINT:PRINT" Beware of rogue missels. These are"; 1990 PRINT" veryfast. A siren warns of falling"; 2000 PRINT"rogues." 2010 LOCATE3,21:PRINT"Press SPACE or FIRE to play" 2020 IFSTRIG(0)THENC=0:GOTO2050 2030 IFSTRIG(1)THENC=1:GOTO2050 2040 GOTO2020 2050 PLAY"t250s9m10000o4c3f8g8a4a4g4a#4a4c4o3a#4o4a8f8g3o3a#4a4o3e4f." 2060 RETURN
Renew
Artigo Orignal: MSX Micro, Digitação: Wilson Pilon
Todo programador BASIC já deve estar "careca" de saber que o comando NEW "apaga" qualquer programa que estiver na memória do micro. E, também, que deve tomar muito cuidado com o uso dele, pois o trabalho que dá redigitar um programa muito grande é "dose para leão". Tudo bem, mas e daí? Bom, daí, que já¡ que os inventores do BASIC MSX não se preocuparam com esse problema o jeito é se virar. Portanto, mãos à obra.
Vamos começar vendo alguns conceitos sobre o BASIC MSX:
1 - Como é armazenado internamente na memória RAM um programa BASIC?
Resposta: Cada linha do programa é armazenada da seguinte forma:
EB | | EA | | NB | | NA | | Conteúdo da Linha | | MFL |
onde:
Para que o interpretador BASIC saiba onde termina o programa, os bytes EB e EA a seguir da última linha do programa estão zerados, ou seja, não apontam para linha alguma. E, ainda, o primeiro byte EB de um programa aparece sempre na posição &H8001. Tomemos como exemplo o seguinte programa:
10 INPUT "NOME";A$
20 PRINT LEN(A$) : STOP
Vejamos como ele fica distribuído na memória:
11 | 80 | 0A | 00 | 85 | 20 | 22 | 4E | 4F | 4D | 45 | 22 | 3B | 41 | 24 | 00 |
I, II | III | IV | " | N | O | M | E | " | ; | A | $ | V |
- endereço &H8001
- endereço da próxima linha &H8011
- número da linha (&H0A = 10)
- token do INPUT
- mfl
22 | 80 | 14 | 00 | 91 | 20 | FF | 92 | 28 | 41 | 24 | 29 | 20 | 3A | 20 | 90 | 00 |
I,II | III | IV | V | ( | A | $ | ) | : | VI |
- endereço &H8011
- endereço da próxima linha &H8022
- número da linha (&H14 = 20)
- token do PRINT
- token do LEN
- token do STOP
00 | 00 |
I | II |
- endereço &H8022
- Fim do programa
2 - Aonde o interpretador BASIC mantém guardado as informações sobre a distribuição da memória RAM?
Resposta: Do endereço &HF380 até &HFFFF estão guardados diversos valores de variáveis do sistema MSX. Citaremos apenas as que nos interessam no momento:
Variável | Endereço | Bytes | Conteúdo |
---|---|---|---|
BOTTON | &HFC48 | 2 | Endereço inicial da memória RAM a partir da qual o BASIC irá armazenar o programa (default = &H8001) |
VARTAB | &HF6C2 | 2 | Endereço inicial da área de variáveis do BASIC |
ARYTAB | &HF6C4 | 2 | Endereço inicial da área de matrizes |
STREND | &HF6C6 | 2 | Endereço final da área de variáveis do BASIC |
FILTAB | &HF860 | 2 | Endereço inicial da área reservada para operações de entrada/saída que usam arquivos. Os comandos PRINT# e INPUT# usam esta área |
HIMEM | &HFC4A | 2 | Endereço final da memória RAM disponível para o BASIC |
3 - O que contém essas variáveis do sistema quando não há programas BASIC na memória?
Resposta: A área de memória onde estaria o programa BASIC fica assim:
00 | 00 |
I | II |
- endereço &H8022
- Fim do programa
Variável | Conteúdo |
---|---|
VARTAB | &H8003 |
ARYTAB | &H8003 |
STREND | &H8003 |
FILTAB | &HF16A |
HIMEM | &HF380 |
4 - O que contém essas variáveis do sistema quando o program descrito anteriormente está presente na memória?
Resposta: As variáveis VARTAB, ARYTAB e STREN passam a conter o endereço &H8024 que é exatamente a localização do byte seguinte ao do último byte EA do programa, que é zero. As variáveis FILTAB e HIMEM não se alteram.
5 - O que faz o comando NEW?
Resposta: O comando NEW não apaga propriamente o programa da memória. Ele apenas engana o interpretador BASIC, rinicializando as variáveis VARTAB, ARYTAB e STREND com o valor &H8003 e zerando o conteúdo dos endereços &H8001 e &H8002, de forma que todo o resto do programa continua na memória. Para constatar este fato, basta que façamos o seguinte:
PRINT HEX$(PEEK(&H8003))
O que produzirá no vídeo a resposta "A" que era o que continha a posição &H8003 antes do NEW.
A Solução
O que fazer então para recuperar o programa que foi "apagado"? Muito simples. Basta restaurar o conteúdo das variáveis VARTAB, ARYTAB e STREND e recolocar os bytes que apontam para a 2ª linha nos endereços &H8001 e &H8002.
No caso do programa anterior bastaria fazer:
POKE &HF6C2,&H24 : POKE &HF6C3,&H80 : POKE &HF6C4,&H24 : POKE &HF6C5,&H80 : POKE &HF6C6,&H24 : POKE &HF6C7,&H80 : POKE &H8001,&H11 : POKE &H8002,&H80
Digite LIST e ... Pronto! O programa voltou são e salvo.
Existe porém, um pequeno problema. A solução dada acima é boa quando o programa é pequeno e podemos destrinchá-lo byte a byte no papel. Isso, porém, não ocorre em 99,999% dos casos, isto é, essa ainda não é a solução definitiva.
Já que não podemos escrever um programa BASIC para recuperar outro, pois dois programas não podem caber simultaneamente na mesma área de memória, o jeito é fazer tudo em linguagem de máquina, ou seja, usando os códigos do Z-80.
A lógica desse programa deverá ser a seguinte:
1º - Procurar o endereço da 2ª linha que fica após a primeira MFL e carregá-lo nos endereços &H8001 e &H8002.
2º - Procurar o endereço do 1º byte após o fim do programa (lembre-se que o que identifica o finao do programa é uma sequência de 3 bytes 00) e carregá-lo nas variáveis VARTAB, ARYTAB e STREND.
E, finalmente, temos o programa que chamaremos de RENEW.
Primeiramente, salve o programa (listagem 1) na fita K7 para evitar possíveis problemas, ok? Já rodou o programa? Muito bem. Agora vamos vê-lo funcionar. Ok, agora vamos "apagá-lo" com o NEW. Comande LIST de novo e veja que dessa vez nada aparece. Agora vamos recuperar o programa de carregamento. Comande PRINT USR(0). Comande LIST de novo e... TCHAN, TCHAN, TCHAN, TCHAN... eis o programa de volta como num passe de mágica! Ótimo, não?
Por último, alguns alertas importantes:
Referências Bibliográficos
Referência de Listagem
Listagem | Arquivo |
---|---|
Listagem BASIC | renew.bas |
Listagem Assembly | renew.asm |
Listagem
10 CLEAR 255,&HF350 20 FOR I=0 TO 32 30 READ B$ 40 POKE &HF350+I,VAL("&h"+B$) 50 NEXT I 60 DEFUSR=&HF350 70 END 80 DATA af 90 DATA 01,ff,ff 100 DATA 21,05,80 110 DATA ed,b1 120 DATA 22,01,80 130 DATA ed,b1 140 DATA be 150 DATA 20,fb 160 DATA 23 170 DATA 0b 180 DATA be 190 DATA 20,f6 200 DATA 23 210 DATA 22,c2,f6 220 DATA 22,c4,f6 230 DATA 22,c6,f6 240 DATA c9
Listagem
.org 0EE80h - 7 ;cabeçalho BLOAD db 0FEh dw inicio dw fim dw inicio inicio: xor a ;Zera acumulador (a <- MLF) ld bc,0FFFFh ;BC <- contador de bytes sem funcao especifica ld hl,08005h ;HL aponta para o primeiro TOKEN do programa cpir ;Compara byte a byte ate achar a MFL ld (08001h),hl ;Carrega em BOTTOM o endereco do 1. byte apos a MFL va: cpir ;Compara byte a byte ate achar a MFL seguinte cp (hl) ;Compara o byte seguinte a MFL (EB) para ver se e zero jr nz,va ;Se nao for, repete a busca pois ha mais linhas inc hl ;Incrementa o apontador do programa dec bc ;Decrementa o contador BC cp (hl) ;Compare o byte seguinte ao EB(EA) para ver se e zero jr nz,va ;Se nao for, repete a busca pois ha mais linhas inc hl ;HL aponta para o 1. byte apos o fim do programa ld (0F6C2h),hl ;Carrega o apontador em VARTAB ld (0F6C4h),hl ;Carrega o apontador em ARYTAB ld (0F6C6h),hl ;Carrega o apontador em STREND ret ;Volta ao BASIC fim: .end
Games
Shark Hunter
Nota 4
Lute com mestres especialistas em campos específicos da arte do Kung Fu que atacam o nosso herói Lee usando bastões, fogo, correntes, estrelas mortais, etc.. Além dos duelos em que só haverá um único sobrevivente (que espera-se seja você), nosso herói deverá passar por diversos estágios nos quais enfrentará obstáculos como vasos, tijolos, tamancos atirados contra Lee.
Você também conhecerá o nome de seus oponentes que são Wang, Tao, Chen, Lang e Wu e, se não for ferido nenhuma vez receberá um bônus de 5000 pontos. Os gráficos, como é tradição da linha MSX, são excelentes eo som também é muito bom, apesar de que na segunda versão estes dois itens encontram seu auge. Este é mais um daqueles games que se recomenda aos aficcionados para terem em casa, sendo interessante, no entanto, a realização de uma pequena pesquisa, pois, já existem no país versões de alguns outros jogos como Yie-Ar Kung Fu II, Faixa Preta (J. Chan) e Kung Fu Master.
Dica: Para eliminar seus oponentes mantenha uma distância curta, mas, quanto ao Sr.Wu (o último mestre) mantenha-se distante e somente dê golpes aéreos (joystick para cima, com o botão sendo pressionado duas vezes).
Track & Filed II
Nota 4
O comedor insaciável de fichas dos fliperamas, agora na tela de sua televisão em uma versão especial de quatro andares, tendo como atração o caça-bônus, já que não oferece níqueis, mas, bonificações.
O objetivo deste jogo é fazer o máximo de pontos com uma única bola, escolhendo-se o nível de dificuldade, e ocasionando um aumento de velocidade. É um game inteligente e ativo, principalmente para os que querem jogar no nível "PRO" com a possibilidade de escolha do número de jogadores.
Em termos de gráficos, Rollerball é um dos melhores do gênero com ótimo acompanhamento sonoro, além de ser mais daqueles que não podem faltar na sua coleção.
Referência de Listagem
Listagem | Arquivo |
---|---|
Shark Hunter | year1.bas |
Track & Field II | roller.bas |
Nenhum comentário:
Postar um comentário