Jump to content

Willsy

Members
  • Content Count

    3,144
  • Joined

  • Last visited

Everything posted by Willsy

  1. ...In a Buck Rogers Stylee.... Lovely... I think he must be using strings to do this? 100 CALL CLEAR :: CALL SCREEN(2):: LEV=1 :: CALL MAGNIFY(3):: RANDOMIZE :: DIM B$(7) 110 CALL COLOR(3,16,1,4,16,1,9,16,1,10,16,1,11,16,1,12,16,1,13,6,1):: GOTO 620 120 DATA 40,0000010387CFDFBF,41,80C0E0E1F3FFFBFD,42,00010387CDEDDDBE,43,C0E0F0F8DC5E5F3E 130 DATA 44,0000041E337575F3,45,000001071F7FBFDF,46,48DCEEF7FBFDFEFF 140 DATA 64,0,65,0028542854101038,66,0000000000020502,67,05010103,68,000000000080408 150 DATA 69,4000008,70,54AA54AA541038FE,71,00000000050A050A,72,0501030F,73,0000000040A040A 160 DATA 74,400080E,75,AAAAAAAAAAAAAAAA,35,0000387CAA7C,47,00000001,58,8,59,00000000001,33,FFFFFFFFFFFFFFFF 170 DATA 120,000201070102,121,0,122,004080E0804,123,0,128,845A773D0CBF7715,129,0E9F770E0B0C102,130,06193053B6FEFEDC 180 DATA 132,0D000119E7271B,133,0,134,B0008098E7E4D8,135,0,136,0106182201030F13,137,337C8,138,0001067CC8C8F0C,139,8 190 DATA 140,0080603E13130F03,141,01,142,8060184480C0F0C8,143,CC3E01,36,0,37,0103070F1F7FFF0C,38,0,39,80C0E0F0F8FEFF3 200 DATA 60,0101010305050001,61,0002000500020001,62,00000080404,63,00800040008,131,E9FAFE4C38CC4244 210 DATA 76,0619F60F,77,0,78,0080F,79,0 220 DATA 76,004020150E1F0E15,77,204,78,00408,79,804 230 DATA 76,030E3CE71C0E,77,0,78,8008C290C4,79,0 240 DATA 76,183CE75A3C18,77,0,78,0,79,0 250 DATA 76,BDDB3C42,77,0,78,0,79,0 260 DATA 76,031CFF1C03,77,0,78,0,79,0 270 DATA 76,01030E0301,77,0,78,80C070C08,79,0,80,0103071D070301,81,0,82,80C0E0B8E0C08,83,0 280 DATA 84,01030F390F0301,85,0,86,80C0F09CF0C08,87,0,88,01071F791F0701,89,0,90,80E0F89EF8E08,91,0 290 DATA 92,01030F3FF93F0F03,93,01,94,80C0F0FC9FFCF0C,95,8 300 DATA 76,001866FF3C,77,0,78,0,79,0,80,001E2DF37F1E,81,0,82,000000C08,83,0 310 DATA 84,000F3FEFF07F1F,85,0,86,0000C070F0E08,87,0,88,00070F7FF7D87F3B,89,0F,90,0080C0F8BC6CF870,91,C 320 DATA 92,03073F77FBDCFF3B,93,0F,94,C0E0FCEEDF3BFEDC,95,F 330 DATA 76,0000000000000103,77,02,78,00000000000080C,79,4,80,0000000000030607,81,0606 340 DATA 82,0000000000C060E,83,606 350 DATA 84,0000000000071D16,85,17141C,86,0000000000E0B868,87,E82838,88,000000000F393E27 360 DATA 89,2C2C243C,90,00000000F09C7CE4,91,3434243C 370 DATA 92,0000000F39393E27,93,2C2C2C2C243C,94,000000F09C9C7CE4,95,34343434243C 380 DATA 76,0001030D0301,77,0,78,0080C070C08,79,0,80,0003071A0703,81,0,82,00C0E0B8E0C,83,0 390 DATA 84,00030F35350F03,85,0,86,00C0F05C5CF0C,87,0,88,00030F75750F03,89,0,90,00C0F05E5EF0C,91,0 400 DATA 92,00071FEAEA1F07,93,0,94,00E0F8AFAFF8E,95,0 410 B$(1)="@[email protected]@@[email protected]@@[email protected]@@[email protected]@@[email protected]@@[email protected]@@A"&RPT$("@",32)&"[email protected]@@[email protected]@@[email protected]@@@[email protected]@@[email protected]@@A"&RPT$("@",31) 420 B$(2)="@[email protected]@@[email protected]@@[email protected]@@@@@@@[email protected]@@[email protected]@@F"&RPT$("@",32)&"[email protected]@@[email protected]@@@@@@@@@@@[email protected]@@F"&RPT$("@",31):: B$(1)=B$(1)&B$(2) 430 B$(2)="[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@" 440 B$(3)="[email protected]@[email protected]@[email protected]@@@@@@@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@@@@@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@@@@@@@@@[email protected]@[email protected]@@@[email protected]@[email protected]@@@@@@@@@@@[email protected]@[email protected]@" :: B$(2)=B$(2)&B$(3) 450 B$(3)=RPT$("@",28)&"[email protected]@@[email protected]@@[email protected]@@[email protected]@[email protected]@@[email protected]@@[email protected]@@A"&RPT$("@",30)&"[email protected]@@[email protected]@@[email protected]@@@@@[email protected]@@[email protected]@@[email protected]@" 460 B$(4)=RPT$("@",28)&"[email protected]@@[email protected]@@[email protected]@@@@@@@@@[email protected]@@[email protected]@@F"&RPT$("@",30)&"[email protected]@@[email protected]@@@@@@@@@@@@@[email protected]@@[email protected]@" :: B$(3)=B$(3)&B$(4) 470 B$(4)="@[email protected]@[email protected]@[email protected]@@@@@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@@@@@[email protected]@[email protected]@[email protected]" 480 B$(5)="@[email protected]@[email protected]@[email protected]@@@@@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@@@@@@@@@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@@@@@@@[email protected]@[email protected]@[email protected]@@[email protected]@@@@@@@@@@@@@[email protected]@[email protected]" :: B$(4)=B$(4)&B$(5) 490 B$(5)=": /: ; / :/ ; / ; / : /:/; score 000000 : fuel left /:; / ; / / ; /:KKKKKKKKKKKKK " 500 B$(6)=" „†„†„† /; /: ;/: : ; :/ ; / ; ;/ :; /: / : / ; / ;/ : ; / ; / : / ; : / / :/ : ;; / / ; / ;/ : / : / ; ;/ ; " 510 B$(7)=":; : /; /: : ;; / : /: ;/ ; ; :/ : / : ; : / ; /; :; / : ; / ;: / : ; ; / ;/: /;/;;: / ; / ; :/ ; ; /: ; /: /" :: RETURN 520 DATA 9,6,3,10,1,9,1,2,6,2,5,13,12,6,13,12 530 DATA 14,5,3,12,1,14,1,2,6,2,5,13,12,6,13,12 540 DATA 13,4,4,14,1,13,1,2,14,2,5,9,15,6,9,15 550 DATA 14,4,4,14,1,14,1,2,5,2,5,13,12,6,13,12 560 DATA 7,3,5,16,1,7,1,2,11,2,5,14,8,6,14,8 570 DATA 5,3,5,16,1,5,1,2,8,2,5,7,15,6,7,15 580 DATA 5,2,6,18,1,5,1,2,11,2,5,14,8,6,14,8 590 DATA 13,2,6,18,1,13,1,2,7,2,5,14,12,6,14,12 600 DATA 7,1,7,20,1,7,1,2,14,2,5,9,15,6,9,15 610 DATA 14,1,7,20,1,14,1,2,6,2,5,13,12,6,13,12 620 CALL COLOR(1,14,1,2,6,2,5,13,12,6,13,12):: FOR I=1 TO 52 :: READ A,C$ :: CALL CHAR(A,C$):: NEXT I :: GOSUB 410 :: AN=10 630 CALL HCHAR(23,1,33,128):: CALL VCHAR(1,31,33,96) 640 DISPLAY AT(14,1):RPT$("()*+,-.",4) 650 DISPLAY AT(3,1):B$(5)&B$(6):B$(7):: DISPLAY AT(15,1):B$(1):: DISPLAY AT(13,5)SIZE(19):"press fire to begin" 660 DISPLAY AT(2,7)SIZE(15):"s t a r d u s t" :: CALL SPRITE(#1,132,5,157,120,#2,36,2,159,120):: DISPLAY AT(24,5)SIZE(20):"c1985 willi doeltsch" 670 CALL POSITION(#1,Y,X):: GOSUB 1580 :: SP=X-95 :: ZE=Y-125 :: GOSUB 1580 :: CALL KEY(1,T,S):: IF T=18 THEN 800 680 A=-14*SGN(SP)+RND*7 :: GOSUB 1580 :: FA=-2*SGN(ZE)+RND*2 :: GOSUB 1580 :: CALL SOUND(-1000,110,30,800,30,850+(X*2),30,-8,10) 690 CALL MOTION(#1,FA,A,#2,FA,A):: GOSUB 1580 :: CALL KEY(1,T,S):: IF T<>18 THEN 670 ELSE 800 700 RESTORE 300 :: GOSUB 1540 :: RESTORE 520 :: GOSUB 1550 :: RETURN 710 RESTORE 270 :: GOSUB 1540 :: RESTORE 530 :: GOSUB 1550 :: RETURN 720 RESTORE 330 :: GOSUB 1540 :: RESTORE 540 :: GOSUB 1550 :: RETURN 730 RESTORE 380 :: GOSUB 1540 :: RESTORE 550 :: GOSUB 1550 :: RETURN 740 RESTORE 300 :: GOSUB 1540 :: RESTORE 560 :: GOSUB 1550 :: RETURN 750 RESTORE 270 :: GOSUB 1540 :: RESTORE 570 :: GOSUB 1550 :: RETURN 760 RESTORE 330 :: GOSUB 1540 :: RESTORE 580 :: GOSUB 1550 :: RETURN 770 RESTORE 380 :: GOSUB 1540 :: RESTORE 590 :: GOSUB 1550 :: RETURN 780 RESTORE 300 :: GOSUB 1540 :: RESTORE 600 :: GOSUB 1550 :: RETURN 790 RESTORE 270 :: GOSUB 1540 :: RESTORE 610 :: GOSUB 1550 :: RETURN 800 CALL DELSPRITE(ALL):: DISPLAY AT(13,5)SIZE(19):": /;; : /;/ ; : /:;" :: GOSUB 1580 810 DISPLAY AT(24,5)SIZE(20):"prepare for level";LEV :: ON LEV GOSUB 700,710,720,730,740,750,760,770,780,790 820 CALL SOUND(200,600,0,700,0,-2,0):: LA=224 :: CALL HCHAR(6,30-H,35,H):: CALL HCHAR(24,5,33,23):: HH=H 830 CALL SPRITE(#1,132,5,157,120,#2,36,2,159,120,#23,36,2,27,LA) 840 LA=LA-1 :: IF LA<123 THEN GOSUB 1050 :: GOTO 830 :: ELSE CALL LOCATE(#23,27,LA):: IF H=0 THEN 1090 850 CALL MOTION(#1,0,0,#2,0,0):: CALL SPRITE(#4,76,FA,104,INT(RND*(176-64))+64,SPE,SPE*SGN(RND-.5)):: GOSUB 1580 860 FOR I=80 TO 92 STEP 4 :: CALL PATTERN(#4,I):: CALL SOUND(-2350,110,30,800,30,1000,30,-8,18):: FOR A=1 TO LP 870 CALL JOYST(1,X,Y):: IF X=4 THEN CALL PATTERN(#1,140):: GOTO 910 ELSE IF X=-4 THEN CALL PATTERN(#1,136):: GOTO 940 ELSE IF FL THEN 890 880 CALL MOTION(#1,0,0,#2,0,0):: CALL PATTERN(#1,132):: FL=-1 :: CALL POSITION(#1,ZE,SP):: IF (SP<20)+(SP>228)THEN GOSUB 1050 :: GOTO 830 890 CALL KEY(1,T,S):: IF T<>18 THEN 970 ELSE CALL POSITION(#1,ZE,SP) 900 CALL SPRITE(#3,120,7,ZE,SP,-17,0):: GOSUB 1560 :: IF HIT THEN 840 ELSE 980 910 CALL POSITION(#1,ZE,SP):: IF SP>220 THEN GOSUB 1050 :: GOTO 830 ELSE FL=0 920 CALL MOTION(#1,0,18,#2,0,18):: CALL KEY(1,T,S):: IF T<>18 THEN 970 ELSE CALL MOTION(#1,0,0,#2,0,0) 930 CALL POSITION(#1,ZE,SP):: CALL SPRITE(#3,120,7,ZE-5,SP+4,-17,17):: GOSUB 1560 :: IF HIT THEN CALL PATTERN(#1,132):: FL=0 :: GOTO 840 ELSE 980 940 CALL POSITION(#1,ZE,SP):: IF SP<32 THEN GOSUB 1050 :: GOTO 830 ELSE FL=0 950 CALL MOTION(#1,0,-18,#2,0,-18):: CALL KEY(1,T,S):: IF T<>18 THEN 970 ELSE CALL MOTION(#1,0,0,#2,0,0) 960 CALL POSITION(#1,ZE,SP):: CALL SPRITE(#3,120,7,ZE-5,SP-6,-17,-17):: GOSUB 1560 :: IF HIT THEN CALL PATTERN(#1,132):: FL=0 :: GOTO 840 ELSE 980 970 GOSUB 1580 :: NEXT A :: LA=LA-1 :: CALL LOCATE(#23,27,LA) 980 GOSUB 1580 :: NEXT I :: CALL DELSPRITE(#4):: LA=LA-1 :: CALL LOCATE(#23,27,LA):: GOTO 840 990 CALL DELSPRITE(#4):: CALL HCHAR(5,19,75,11):: GOTO 810 1000 CALL DELSPRITE(#3):: CALL PATTERN(#4,128):: CALL SOUND(-400,-7,0):: CALL MOTION(#4,3,3):: CALL SOUND(-400,-6,6):: CALL PATTERN(#1,132) 1010 GOSUB 1580 :: CALL POSITION(#4,ZE,SP):: CALL SPRITE(#5,128,7,ZE,SP,3,-3):: GOSUB 1580 :: CALL POSITION(#1,ZE,SP):: CALL LOCATE(#2,159,SP) 1020 CALL SOUND(-400,-6,12):: GOSUB 1580 :: CALL SOUND(-600,-6,16):: CALL DELSPRITE(#4,#5) 1030 GOSUB 1580 :: CALL HCHAR(6,30-H,32):: H=H-1 1040 SCORE=SCORE+(LEV*50):: DISPLAY AT(4,7)SIZE(7):SCORE :: RETURN 1050 CALL MOTION(#1,-1,1,#2,-1,-1):: CALL SOUND(-400,-7,0):: CALL PATTERN(#1,128,#2,128) 1060 CALL HCHAR(6,AN,32,2):: AN=AN-2 :: IF AN=2 THEN 1490 ELSE CALL HCHAR(6,AN,32,2):: CALL DELSPRITE(ALL) 1070 LA=224 :: CALL LOCATE(#23,27,LA):: CALL HCHAR(6,30-HH,35,HH):: H=HH 1080 RETURN 1090 CALL DELSPRITE(ALL):: DISPLAY AT(11,1):B$(7)&B$(7):B$(7) 1100 DISPLAY AT(24,3)SIZE(24):"prepare for special game" 1110 RESTORE 200 :: FOR I=1 TO 16 :: READ A,C$ :: CALL CHAR(A,C$):: NEXT I 1120 A=64 :: FOR I=17 TO 22 :: CALL SPRITE(#I,132,1,A,245):: A=A+16 :: NEXT I :: A=64 :: FOR I=23 TO 28 :: CALL SPRITE(#I,132,1,A,:: A=A+16 :: NEXT I 1130 ON LEV GOTO 1190,1150,1160,1170,1180,1190,1200,1190,1150,1160 1140 RESTORE 210 :: GOTO 1210 1150 RESTORE 300 :: GOTO 1210 1160 RESTORE 230 :: GOTO 1210 1170 RESTORE 270 :: GOTO 1210 1180 RESTORE 250 :: GOTO 1210 1190 RESTORE 240 :: GOTO 1210 1200 RESTORE 220 1210 FOR I=1 TO 4 :: READ A,C$ :: CALL CHAR(A,C$):: NEXT I 1220 A=64 :: FOR I=4 TO 9 :: CALL SPRITE(#I,76,INT(RND*13)+3,A,230,0,INT(RND*-3)+-1):: A=A+16 :: NEXT I :: CALL HCHAR(24,3,33,26) 1230 CALL SPRITE(#1,132,5,163,120):: CALL SOUND(100,1400,0) 1240 FOR I=1 TO 10+(LEV*3) 1250 CALL COINC(ALL,HIT):: IF HIT THEN 1430 1260 CALL JOYST(1,X,Y):: IF X=4 THEN 1290 ELSE IF X=-4 THEN 1270 ELSE CALL MOTION(#1,0,0):: GOTO 1310 1270 CALL COINC(ALL,HIT):: IF HIT THEN 1430 1280 CALL POSITION(#1,ZE,SP):: IF SP<32 THEN CALL MOTION(#1,0,0):: GOTO 1310 ELSE CALL MOTION(#1,0,-20):: GOTO 1310 1290 CALL COINC(ALL,HIT):: IF HIT THEN 1430 1300 CALL POSITION(#1,ZE,SP):: IF SP>214 THEN CALL MOTION(#1,0,0):: GOTO 1310 ELSE CALL MOTION(#1,0,20) 1310 CALL KEY(1,T,S):: IF T<>18 THEN 1250 ELSE CALL MOTION(#1,0,0):: CALL POSITION(#1,ZE,SP):: CALL SOUND(-1570,800,30,800,30,2500,30,-8,12) 1320 CALL SPRITE(#2,60,16,ZE-6,SP,-20,0) 1330 FOR H=1 TO 16 :: CALL KEY(1,T,S):: IF T=18 THEN 1350 ELSE CALL JOYST(1,X,Y):: CALL MOTION(#2,-20,X) 1340 NEXT H :: CALL DELSPRITE(#2):: CALL DELSPRITE(#2):: CALL COINC(ALL,HIT):: IF HIT THEN 1370 ELSE 1260 1350 CALL SOUND(-250,-6,:: CALL POSITION(#2,ZE,SP):: A=INT((ZE/8)/2):: CALL COINC(#2,#A,8,HIT):: CALL PATTERN(#2,128) 1360 IF HIT THEN 1370 ELSE CALL DELSPRITE(#2):: CALL DELSPRITE(#2):: GOTO 1250 1370 CALL LOCATE(#A,(A**2,230):: CALL DELSPRITE(#2):: CALL SOUND(300,-7,5):: GOSUB 1040 1380 NEXT I 1390 CALL MOTION(#1,0,0):: FOR I=9 TO 4 STEP -1 :: CALL SOUND(-280,-7,I*2-7):: CALL PATTERN(#I,128):: CALL MOTION(#I,0,0):: FOR A=1 TO 55 1400 NEXT A :: CALL DELSPRITE(#I):: NEXT I :: LEV=LEV+1 :: IF LEV>10 THEN 1490 1410 CALL SOUND(900,195,0,246,0,349,0):: CALL SOUND(4250,261,0,329,0,391,0) 1420 CALL DELSPRITE(ALL):: DISPLAY AT(14,1):RPT$("()*+,-.",4):: DISPLAY AT(15,1):B$(1):: GOTO 810 1430 CALL MOTION(#1,0,0):: FOR I=1 TO 5 :: CALL COLOR(1,INT(RND*13)+3,2):: NEXT I :: CALL COLOR(1,FA,2) 1440 CALL POSITION(#1,A,FA):: FOR I=4 TO 9 :: CALL MOTION(#I,0,0):: CALL POSITION(#I,ZE,SP):: CALL PATTERN(#I,84):: CALL MOTION(#I,(A-ZE)/2,(FA-SP)/2) 1450 CALL COINC(#I,#1,8,HIT):: IF HIT THEN 1460 ELSE 1450 1460 CALL DELSPRITE(#I):: CALL PATTERN(#1,128):: CALL SOUND(100,-7,0):: CALL PATTERN(#1,132) 1470 FOR X=1 TO 5 :: CALL COLOR(#1,16,#1,5):: NEXT X :: NEXT I :: CALL PATTERN(#1,128) 1480 FOR I=2 TO 5 :: CALL SOUND(-900,-7,I):: CALL SPRITE(#I,128,INT(RND*13)+1,A,FA,INT(RND*-2)+-2,INT(RND*2)+2*SGN(RND-.5)):: NEXT I :: GOSUB 1050 :: GOTO 1420 1490 CALL DELSPRITE(ALL):: IF SCORE<=HIC THEN 1500 ELSE HIC=SCORE 1500 CALL SPRITE(#1,132,5,157,120,#2,36,2,159,120) 1510 DISPLAY AT(8,4)SIZE(22):"highscore ";HIC :: DISPLAY AT(10,4)SIZE(22):"spielpunkte ";SCORE 1520 DISPLAY AT(12,4)SIZE(22):"neues spiel j n" :: DISPLAY AT(14,1):RPT$("()*+,-.",4):: GOSUB 1580 1530 CALL KEY(3,T,S):: IF T=74 THEN SCORE=0 :: AN=10 :: LEV=1 :: GOTO 650 ELSE IF T=78 THEN CALL CLEAR :: END ELSE GOSUB 1580 :: GOTO 1530 1540 FOR I=1 TO 20 :: READ A,C$ :: CALL CHAR(A,C$):: GOSUB 1580 :: NEXT I :: HH=H :: RETURN 1550 READ FA,LP,SPE,H :: FOR I=1 TO 4 :: READ X,Y,SP :: CALL COLOR(X,Y,SP):: GOSUB 1580 :: NEXT I :: RETURN 1560 FOR X=1 TO 4 :: CALL COINC(#3,#4,10,HIT):: IF HIT THEN 1000 1570 GOSUB 1580 :: NEXT X :: CALL DELSPRITE(#3):: RETURN 1580 DISPLAY AT(15,1):B$(F):: F=F+1 :: IF F=5 THEN F=1 1590 RETURN
  2. Those old guys certainly knew how to squeeze XB... I wonder if the Buck Rogers style of land movement could be done in XB by rotating the color sets? 10 CALL CLEAR :: CALL SCREEN(4):: PRINT " DEVASTATOR" :: PRINT :: PRINT 20 PRINT " by David R. Arnold" :: PRINT :: PRINT " translated for the TI by Patrick Parrish" 30 PRINT :: PRINT " adapted and programmed for the Win994a Simulator by Guy Matthew Babin" 40 PRINT :: PRINT 45 PRINT " requires a joystick." :: PRINT 60 PRINT " please select 'Map Keyboard/Joystick'" 70 PRINT " under FILE-PREFERENCES." 75 PRINT 77 PRINT " use NUMERIC KEYPAD to use JOYSTICK." 80 PRINT 89 INPUT "PRESS <ENTER> TO CONTINUE..":GUY$ 90 REM TI EXTENDED BASIC 99 REM DEVASTATOR 100 GOTO 150 110 FOR F=12 TO 14 :: CALL COLOR(F,2,1):: NEXT F :: RETURN 120 FOR F=10 TO 16 :: CALL SCREEN(F):: NEXT F :: CALL SCREEN(2):: RETURN 130 FOR V=1 TO 30 :: CALL SOUND(D1,F1,V,F2,V):: NEXT V :: RETURN 140 FOR ROW=2 TO 7 :: CALL HCHAR(ROW,22,32,7):: NEXT ROW :: RETURN 150 RANDOMIZE 160 DIM E$(13) 170 CALL CLEAR :: CALL SCREEN(2) 180 GOSUB 530 190 GOSUB 1030 :: CALL CLEAR :: CALL SCREEN(2) 200 FOR H=2 TO 14 :: CALL COLOR(H,2,2):: NEXT H 210 FOR J=1 TO 4 :: FOR I=1 TO 11 :: CALL HCHAR(I,INT(RND*28)+3,46):: NEXT I :: NEXT J 220 DISPLAY AT(13,1):"``````````a b``````````" 230 DISPLAY AT(14,1):"hhhhhhhhhi` `jhhhhhhhhh" 240 DISPLAY AT(15,1):"ppppppppqh` `hrpppppppp" 250 DISPLAY AT(16,1):"pppppppqpha``````bhprppppppp" 260 DISPLAY AT(17,1):"``````appihhhhhhhhjppb``````" 270 DISPLAY AT(18,1):"`````a`pqpppppppppprp`b`````" 280 DISPLAY AT(19,1):"hhhhi``qppppppppppppr``jhhhh" 290 DISPLAY AT(20,1):"hhhih`a``````````````b`hjhhh" 300 DISPLAY AT(21,1):"hhihha````````````````bhhjhh" 310 DISPLAY AT(22,1):"pqhhihhhhhhhhhhhhhhhhhhjhhrp" 320 DISPLAY AT(23,1):"qphihhhhhhhhhhhhhhhhhhhhjhpr" :: DISPLAY AT(24,1):"ppihhhhhhhhhhhhhhhhhhhhhhjpp" 330 FOR J=1 TO 2 :: FOR I=12 TO 14 :: CALL HCHAR(I,INT(RND*6)+14,46):: NEXT I :: NEXT J 340 DISPLAY AT(2,24):CHR$(120)&CHR$(121):: DISPLAY AT(3,23):CHR$(122)&CHR$(136)&CHR$(137)&CHR$(123) 350 DISPLAY AT(4,22):CHR$(124)&CHR$(125)&CHR$(138)&CHR$(139)&CHR$(125)&CHR$(126) 360 DISPLAY AT(5,22):CHR$(127)&CHR$(125)&CHR$(140)&CHR$(141)&CHR$(125)&CHR$(128) 370 DISPLAY AT(6,23):CHR$(129)&CHR$(142)&CHR$(143)&CHR$(130) 380 DISPLAY AT(7,24):CHR$(131)&CHR$(132) 390 CALL COLOR(12,6,1):: CALL COLOR(13,6,1):: CALL COLOR(14,3,6) 400 FOR F=2 TO 8 :: CALL COLOR(F,16,1):: NEXT F 410 CALL SPRITE(#2,108,11,80,80) 420 CALL MAGNIFY(LEVEL):: SPEED=8 :: TOL=30 :: IF LEVEL=3 THEN TOL=15 430 CALL SPRITE(#1,100,16,100,110) 440 A=9 :: B=10 :: C=11 450 T=A :: A=B :: B=C :: C=T 460 CALL COLOR(A,2,5):: CALL COLOR(5,2,14):: CALL COLOR(C,2,7) 470 CALL MOTION(#2,INT(RND*40-20),INT(RND*40-20)) 480 CALL JOYST(1,X1,Y1):: CALL MOTION(#1,-Y1*SPEED,X1*SPEED) 490 CALL COINC(#1,#2,TOL,G):: IF G THEN GOSUB 700 500 W=W+1 :: IF W>150 THEN 770 510 GOTO 450 520 REM DEFINE CHARS 530 A$="" :: B$="0102040810204080" :: C$="8040201008040201" 540 CALL CHAR(95,B$) 550 FOR I=96 TO 112 STEP 8 :: CALL CHAR(I,A$):: CALL CHAR(I+1,B$) 560 CALL CHAR(I+2,C$):: NEXT I 570 FOR I=0 TO 13 :: READ E$(I):: CALL CHAR(120+I,E$(I)):: NEXT I 580 FOR I=0 TO 7 :: READ E$(I):: CALL CHAR(I+136,E$(I)):: NEXT I 590 DATA 0000000000000F7F,000000000000F0FE,01030F1F3F7FFFFF 600 DATA 80C0F0F8FCFEFFFF,0001010103030303,FFFFFFFFFFFFFFFF 610 DATA 00808080C0C0C0C0,0303030301010100,C0C0C0C080808000 620 DATA FF7F3F3F1F0F0703,FFFEFCFCF8F0E0C0,7F0F000000000000 630 DATA FEF0000000000000,0800667C18666810 640 DATA E0F07F7F7FFFFFFF,0818F8F8F0F8F0F0,7F7F7F3D1C0E0201 650 DATA F0F0908800180000,03070F0F0F070703,F0FFFFFEFCFCF8F0 660 DATA 0303010101010101,E0C0C0C080808000 670 CALL CHAR(108,"00073FE2E2E2FFFF667F0C1C0000000000E0FC474747FFFF66FE303800000000") 680 CALL CHAR(100,"0000000003040808FF0808040300000080808080E0908888FF888890E0808080") 690 RETURN 700 REM ALIEN SHIP DESTROYED 710 CALL DELSPRITE(#2):: CALL MOTION(#1,0,0) 720 CALL SCREEN(15):: CALL SCREEN(10) 730 CALL SCREEN(2):: FOR DVOL=1 TO 24 STEP 4 :: CALL SOUND(100,-7,DVOL):: NEXT DVOL 740 CALL SCREEN(2) 750 D=D+1 :: CALL SPRITE(#2,108,11,INT(RND*192)+1,INT(RND*256)+1) 760 RETURN 770 IF D<20 THEN 810 775 FOR GUY=2 TO 8 :: CALL COLOR(GUY,11,1):: NEXT GUY 780 GOTO 950 790 FOR I=30 TO 1 STEP -2 :: CALL SOUND(-1000,-5,I):: NEXT I :: RETURN 800 REM EARTH DESTROYED 810 GOSUB 790 :: FOR I=8 TO 0 STEP -1 :: CALL HCHAR(7+I,25-I,95):: CALL COLOR(8,INT(RND*+9,1):: NEXT I 820 FOR J=1 TO 40 :: NEXT J 830 FOR I=8 TO 0 STEP -1 :: CALL HCHAR(7+I,25-I,32):: NEXT I 840 GOSUB 120 :: D1=-100 :: F1=-6 :: F2=110 :: GOSUB 130 :: GOSUB 120 :: GOSUB 110 :: GOSUB 140 850 J=0 :: I=0 860 DISPLAY AT(1,23+I):CHR$(133):: DISPLAY AT(1,26+J):CHR$(133) 870 DISPLAY AT(2,22+I):CHR$(133)&CHR$(133):: DISPLAY AT(2,26+J):CHR$(133)&CHR$(133) 880 DISPLAY AT(3,21+I):CHR$(133)&CHR$(133)&CHR$(133):: DISPLAY AT(4,25+J):CHR$(133)&CHR$(133)&CHR$(133) 890 DISPLAY AT(5,22+I):CHR$(133)&CHR$(133):: DISPLAY AT(5,25+J):CHR$(133)&CHR$(133)&CHR$(133):: GOSUB 120 900 DISPLAY AT(6,25+J):CHR$(133):: DISPLAY AT(7,23+I):CHR$(133):: DISPLAY AT(7,27+J):CHR$(133) 910 DISPLAY AT(8,22+I):CHR$(133)&CHR$(133):: DISPLAY AT(9+J,24):CHR$(133)&CHR$(133) 920 CALL COLOR(13,9,1):: GOSUB 120 :: D1=30 :: F1=-6 :: F2=110 :: GOSUB 130 :: IF J=1 THEN 940 930 I=-1 :: J=1 :: GOSUB 110 :: GOSUB 120 :: GOTO 860 940 FOR F=1 TO 100 :: NEXT F 945 FOR GUY=2 TO 8 :: CALL COLOR(GUY,7,1):: NEXT GUY 950 CALL DELSPRITE(ALL):: W=0 960 CALL CLEAR :: CALL SCREEN(2):: DISPLAY AT(8,1):"ALIEN SHIPS DESTROYED: ";D 970 IF D>HD THEN HD=D 980 DISPLAY AT(13,6):"BEST ROUND: ";HD 990 D=0 :: DISPLAY AT(17,1):"PLAY AGAIN, CAPTAIN (Y/N)?" 1000 CALL KEY(0,KEY,ST):: IF ST=0 THEN 1000 1010 IF (KEY=89)+(KEY=121)THEN CALL CLEAR :: GOTO 200 1015 IF (KEY=78)+(KEY=110)THEN 1020 1017 GOTO 1000 1020 DISPLAY AT(21,6):"SO LONG" :: FOR I=1 TO 500 :: NEXT I :: STOP 1030 FOR J=2 TO 8 :: CALL COLOR(J,1,1):: NEXT J 1040 PRINT " D E V A S T A T O R" :: PRINT :: PRINT 1050 PRINT "YOUR MISSION IS TO PROTECT" :: PRINT "EARTH FROM THE APPROACHING" 1060 PRINT "DEVASTATOR. SHOOT DOWN AT" :: PRINT "LEAST 20 GUARDIAN SHIPS TO" 1070 PRINT "ENABLE YOUR COMRADES TO" :: PRINT "DESTROY THE DEVASTATOR." 1080 PRINT :: PRINT "YOU HAVE ONLY LIMITED TIME" :: PRINT "IN WHICH TO COMPLETE YOUR" 1090 PRINT "MISSION. POSITION YOUR" :: PRINT "CROSSHAIR WITH THE JOYSTICK." 1100 FOR J=2 TO 8 :: CALL COLOR(J,15,1):: NEXT J 1110 PRINT :: PRINT "ENTER YOUR SKILL LEVEL" :: PRINT 1113 PRINT " EASY (1) OR NORMAL (2)" :: PRINT :: PRINT "CAPTAIN?" 1115 ACCEPT AT(23,10)BEEP VALIDATE("12")SIZE(1):LEVEL$ 1120 LEVEL=5-VAL(LEVEL$) 1130 GOSUB 790 1140 PRINT :: PRINT :: PRINT "THE DEVASTATOR IS APPROACH-" 1150 PRINT "ING. GRAB YOUR JOYSTICK," :: PRINT "AND PREPARE TO DO BATTLE." 1160 FOR I=1 TO 750 :: NEXT I 1170 RETURN
  3. Setting local echo in DOS Telnet Client (XP): 1) Click Start, click Run, and then type telnet.exe to start the telnet program. For example, type telnet pop.microsoft.com 110 2) Type Ctrl+] 3) Type the following command: set localecho 4) Press Enter on a blank line.
  4. Suspect 9901? Guys, is the keyboard buffered at all before it hits the 9901?
  5. That's great news. This really is going to be a great board! I already have plans for a major project with it... Sigh...! Thanks to you all. Mark
  6. Weird format? WEIRD FORMAT? It might be in your world, mate, but it's perfectly normal for us! Well, big endian is actually very common. The TMS9900 may have been one of the first/the first bits of silicon to be big endian, but IIRC all the mini's of the day were big endian. The entire 68K range is big endian etc... Don't forget the TMS9900 was an attempt to consolidate an entire CPU board into a single chip, so the big-endian constraint was already established. Anyway, sorry to hijack... I'm getting away from the GCC compiler... I'll shut up now!
  7. Willsy

    GPLHOW2

    That's lovely! Watching it now, thanks!
  8. Can we have a jumper to change it? Pretty please? I mean, you're not using a real '379, right? The DIL ones are obsolete as far as I know. Presumably the '379 is emulated in the fpga? Sorry if I've got this all arse about face... I'm ill in bed so I'm hogging the forum!
  9. Jacques, Your understanding is 100% correct. DO actually moves them to the return stack and LOOP manipulates them there, throwing them away when the loop is finished. Mark
  10. Why use the inverted outputs of the '379? Especially as there is programmable logic already on the chip. It makes coding a f**ing pain in the ass, quite frankly.
  11. That looks correct, it would return an int. It may not be what you intended, but I think the compiler got it right...?
  12. The keyboard type is set by writing to the byte >8374. TurboForth writes the value >05 into >8374 to enable a 'full' keyboard scan in both upper and lower case. More info here: http://nouspikel.group.shef.ac.uk//ti99/tutor1.htm#KSCAN
  13. Yep. Forth does that! It takes a while. I am still learning it too! Coding Forth is a real "brain workout!" - It's like fitness for the brain! It's kind of like Suduko, but very satisfying when you get it right... Then you want to re-visit the code and see if you can make it better! Why is Forth so different? Is it the stack. I actually don't think it's the stack. We often use the stack on Z80 and Intel processors. The thing with Forth, is that you are managing information flow (data, via the stack), *and* program flow. In most other languages, we only manage program flow. In forth, you have to imagine the stack in your head. It takes a while. And yes, pencil and paper is an excellent way to do it. And use vertical code techniques with stack comments, and re-write it horizontal later when you have it working. For example: : WIPE 0 ( TLA) 959 ( BRA) 480 0 DO DUP ( TLA BRA BRA) 42 ( TLA BRA BRA 42) SWAP ( TLA BRA 42 BRA) V! ( TLA BRA) 1- ( TLA BRA-1) SWAP ( BRA TLA) DUP ( BRA TLA TLA) 42 ( BRA TLA TLA 42) SWAP ( BRA TLA 42 TLA) V! ( BRA TLA) 1+ ( BRA TLA+1) SWAP ( TLA BRA) LOOP 2DROP ( --) ; TLA=top left address BRA=bottom right address Above I've shown the contents of the stack after every instruction. You can paste the code into TF and it will run. The 2DROP just drops the TLA and BRA from the stack (2DROP=drop topmost two items) to leave the stack clean on exit. In case you didn't know, TF tells you how many items there are on the stack while you are entering code. Type: 1 2 3 TF responds with ok:3 to tell you there are three items on the stack. Now type + and you get ok:2 What happened? Well, + added the top two stack items, replacing them with their sum. Want to see what's on the stack? .S TF replies: 1 5 < OK:2 The < sign is pointing to the top of the stack (top of stack on the right, bottom on the left). Sorry if you already know all this. It might help others though Later, when you have your code running, you can re-write in the traditional horizontal Forth style, maybe something like this: : WIPE 0 959 480 0 DO DUP 42 SWAP V! 1- SWAP DUP 42 SWAP V! 1+ SWAP LOOP 2DROP ; You could then paste that code into the block editor: 20 EDIT (select paste in Classic99) Press FCTN 9 to quit the editor. Type FLUSH to write the block back to disk. Now the code is on disk on block 20. You can load it anytime with 20 LOAD Before I go: To make a BLOCKS file to store code in: MKDSK DSK1.BLOCKS <size> E.g. MKDSK DSK1.BLOCKS 80 Creates an 80K (80 blocks/screens) file to hold code/data/anything you like. TF by default looks for a file called DSK1.BLOCKS on startup. If your blocks file is on another drive (e.g. DSK3) then hold 3 as TF starts. If you want to bypass auto-load then hold ENTER as TF starts. Final word re blocks files: Blocks files, when loaded with LOAD are basically batch files, and are extremely powerful. The easiest way to think of blocks files is to remember that LOAD basically "fools" TF into thinking that the stuff in the block has been typed in via the keyboard! Therefore you can have interactive loading, e.g., on block 20: .( Compiling WIPE) : WIPE 0 959 480 0 DO DUP 42 SWAP V! 1- SWAP DUP 42 SWAP V! 1+ SWAP LOOP 2DROP ; .( Compiled. Type WIPE to test) Hmmm... Ok, sorry, I didn't want to take over this thread - hope you don't mind - just wanted to save you pulling your hair out if you do try TF Mark
  14. Hi there! No, it's not the FOR code that needs DECIMAL - if you look above it, just after we create the word UDG (: UDG) we switch into HEX mode with the word HEX. This simply tells the compiler that any number that it 'sees' should be seen as a hex number. We then define the characters using good old hex, and then switch the compiler back to DECIMAL again. HEX is simply short for: 16 BASE ! DECIMAL: 10 BASE ! Say you wanted to view everything in binary... You would do 2 BASE ! - this puts the number 2 on the stack, then BASE executes - BASE simply puts an address on the stack - the address of the variable that holds the current number base. ! is the forth version of POKE. It requires a value (in this case 2) on the stack, and an address on the stack. Thus, the value 2 gets poked into the BASE register, and the base instantly changes. Bases from 2 to 36 are supported (!) Note: If you were in HEX mode, and you wanted to go back to decimal, you would have to do A BASE ! - because A is 10 in hex! This can get confusing real quick, so DECIMAL and HEX is provided to allow you to switch between the most popular two number bases from any base that you might be in at the time. Would you like an explanation of how the code bricks code works, or are you happy with it?
  15. Feature request (pretty please)! A routine to time sections of code. How would we integrate something like that into the Classic99 TI-99/4A "architecture"? How about: Write to CPU ram >0000 (any value) - zero's timer and begins counting Write to CPU ram >0002 (any value) - stops counting and places the accrued number of milliseconds at >FFFA So: CLR @0 ; begin timing LI R0,0 LI R1,BUFFER LI R2,768 BLWP @VMBR CLR @2 ; stop timing Number of milliseconds to be found at >FFFA (and possibly in the debug window ) Whaddaya think? Mark
  16. First, for fun, I benchmarked the two XB programs: Program A: 100 CALL CLEAR::CALL SCREEN(15)::CALL COLOR(1,7,1):$="00FE000FE0EF"::FOR A=1 TO 7 110 CALL CHAR(32+A,RPT$(SEG$(P$,(A AND 1)*2+1,2),3)&"00"&RPT$(SEG$(P$,(A AND 6)+5,2),3))::NEXT A 120 FOR I=1 TO 1000::FOR A=0 TO 1::R=INT(RND*24)+1::C=INT(RND*(32-A))+1::CALL GCHAR(R,C,G)::CALL HCHAR(R,C,G OR (1+A)) 130 IF A THEN CALL GCHAR(R,C+1,G)::CALL HCHAR(R,C+1,G OR 4) 140 NEXT A::NEXT I Run time in XB (classic99, no overdrive etc): 7 Minutes 27 Seconds (447 Seconds) Program B: 100 CALL CLEAR::CALL SCREEN(15)::CALL COLOR(1,7,1) 110 CALL CHAR(33,"FEFEFE") 120 CALL CHAR(34,"000000000F0F0F") 130 CALL CHAR(35,"FEFEFE000F0F0F") 140 CALL CHAR(36,"00000000E0E0E") 150 CALL CHAR(37,"FEFEFE00E0E0E") 160 CALL CHAR(38,"00000000EFEFEF") 170 CALL CHAR(39,"FEFEFE00EFEFEF") REM TOP BRICK IN ROW 175 FOR I=1 TO 1000 180 R=INT(RND*24)+1::C=INT(RND*32)+1 190 CALL GCHAR(R,C,G)::CALL HCHAR(R,C,G OR 1) REM LOWER BRICK IN ROW 200 R=INT(RND*24)+1::C=INT(RND*31)+1 210 CALL GCHAR(R,C,G)::CALL HCHAR(R,C,G OR 2) 220 CALL GCHAR(R,C+1,G)::CALL HCHAR(R,C+1,G OR 4) 230 NEXT I Run time in XB (classic99, no overdrive etc): 6 Minutes 12 Seconds (372 Seconds) Then I knocked up the following (just paste into TF then type BRICKS): 0 VALUE SEED $8379 [email protected] TO SEED : UDG HEX DATA 4 FEFE FE00 0000 0000 DATA 4 0000 0000 0F0F 0F00 DATA 4 FEFE FE00 0F0F 0F00 DATA 4 0000 0000 E0E0 E000 DATA 4 FEFE FE00 E0E0 E000 DATA 4 0000 0000 EFEF EF00 DATA 4 FEFE FE00 EFEF EF00 DECIMAL 6 FOR I 33 + DCHAR NEXT ; : RND SEED 31421 * 6927 @ + DUP TO SEED ; : BRICKS 1 GMODE 14 SCREEN 4 6 0 COLOR UDG 1000 FOR \ top brick in row RND 23 MOD 5 << RND 31 MOD + DUP [email protected] 1 OR SWAP V! \ lower brick in row RND 23 MOD 5 << RND 31 MOD + DUP DUP [email protected] 2 OR SWAP V! 1+ DUP [email protected] 4 OR SWAP V! NEXT ; Run time in TF (classic99, no overdrive etc): 5 Seconds Making TF: * 89.4 times faster than program A (8840%) * 74.4 times faster than program B (7340%) Counting the instructions inside the loop in the Forth program, I count 38 instructions. Given that the loop is 1000 times, thats 38,000 instructions. 38000/5=7600 FIPS (Forth instructions per second). However, it's a bit faster than this, as I start timing (as best I can) when I hit ENTER to run the code, which includes: Initialise random number seed Set graphics mode Clear screen Set color set Define 7 characters It's very difficult to factor that out with the tools we have. I would approximate that TF, on this particular test, can do ~8000 FIPS. Clearly, assembly can beat this, and GCC too, since GCC churns out assembly. Mark
  17. It's easy when you get used to it! It's the simplicity of it (when the penny finally drops!) that will blow your mind! Mark
  18. I can't say I don't have enough free time, I broke my shoulder three weeks ago on bicycle. Pah! You have TWO shoulders. That means you still have one spare shoulder! GET TO WORK!
  19. I'm not sure if Lucien posted this to AA or not... I certainly didn't see it... http://www.youtube.com/watch?v=7EtfsyyBdXA Really nice! Is it ready to release and play?
  20. Hmmm.... Ok, so, it's memory mapped... (duh! what else could it be )... something tells me that reading status register #1 will not be as simple as reading >8803
  21. Er, my mind has gone blank. How do I read the status register on a standard 9918? More to the point, how do I read status register *1* on a 9938? Has anyone got any ideas? Mark
  22. Wow! Yes! Awesome! That beats TF, for sure. However, the development cycle in TF is much nicer Okay, it looks like GCC has set the bar that I have to try to match/beat. This may take some time! Regarding GPL, I think if you can write TMS9900 assembly, you'll have no problems learning GPL. Personally, I'm very interested in learning it - I won't feel like I've fully explored the TI and got the TI coder black belt until I do! Mark
  23. Not at all - The TI is my hobby, and I don't spend/waste negative energy on my hobby! Hobbies should be fun! This isn't an argument (at least, not for me) - it's merely a discussion. We might both learn new stuff along the way. That's what it's all about! <-- big smiley!
  24. That's just semantics! A variable *is* a memory location! Where do you think TI BASIC or XB (or Forth) programs store their variables? They are stored in memory, of course!
×
×
  • Create New...