Manic1975 Posted November 24, 2012 Share Posted November 24, 2012 Here is also PONGO with same problem. This game is from Germany. 9 DATA 1,5,1,27,5,10,5,22,9,3,9,29,13,13,13,19,17,2,17,23,21,7,21,27 10 CALL CLEAR :: CALL CHARSET :: CALL SCREEN(11) 11 GOTO 20 :: Z:T :: S :: RUNDE :: PUNKTE :: PONGO :: BONUS :: VASE :: I :: A :: B :: P :: E1 :: E2 :: E3 :: J :: MOT :: ST :: R :: C :: X :: Y :: BP 12 CALL CHAR :: CALL MAGNIFY :: CALL SPRITE :: CALL KEY :: CALL EINLEITUNG :: CALL COLOR :: CALL DELSPRITE :: CALL HCHAR :: CALL GCHAR :: CALL STAND 13 CALL SOUND :: CALL PONGOANZ :: CALL COINC :: CALL MOTION :: CALL POSITION :: CALL PATTERN :: CALL VCHAR :: CALL MELODY :: CALL LOCATE :: CALL MELODY2 14 CALL MELODY3 :: !@P- 20 CALL CHAR(128,"000103061F1F0703113F3F130707070F10F0E0F0F0F0E0C080E0E0F0FB3B3E78") 30 CALL CHAR(64,"3C4299A1A199423C") 40 DISPLAY AT(1,10):"P O N G O" :: DISPLAY AT(2,10):"=========" :: CALL MAGNIFY(4) :: CALL SPRITE(#1,128,14,24,106) 50 DISPLAY AT(24,1):" @ 1983 VOLKER BECKER " 60 DISPLAY AT(12,1):" WOLLEN SIE EINE SPIELANLEITUNG ? (J/N)" 70 CALL KEY(5,T,S) :: IF T=74 THEN 80 ELSE IF T=78 THEN 90 ELSE 70 80 CALL EINLEITUNG 90 CALL CLEAR 95 RUNDE=0 :: PUNKTE=0 :: PONGO=5 :: BONUS=0 100 ON ERROR 690 110 CALL COLOR(2,8,2,3,10,2,4,10,2) 120 CALL COLOR(5,10,2,6,10,2,7,10,2,8,10,2) 130 CALL CHAR(100,"001B1F0F0F0FC7F3373F1F1F1F0F060E00D8F8F0F0F0E3CFECFCF8F8F8F06070") 140 CALL CHAR(104,"000000000000060F86F6FEFF1F9EFEF800000000000000303078FCF6FEFE7E3B") 150 CALL CHAR(96,"000000183C2EFE1F0100000000000100000000000000000084C2F2E6CC98F0E0") 160 CALL CHAR(36,"0000000000031F3F7F7F3F1F16354484000000000000C0FCFEFEFCF80C0A91A1") 170 CALL CHAR(40,"00000E11150F61530F030103070F060E00007088A87086CAF0C080C0E0F06070") 180 CALL CHAR(47,"FFFF001C0C7E1414") 190 CALL SCREEN(2) :: CALL COLOR(0,2,2,1,11,2) :: CALL COLOR(14,8,2) 200 CALL CLEAR 210 CALL CHAR(33,"FFFFFFFF7E3CDBFF") :: CALL CHAR(34,"0000FF7E3C3C3C7E") 220 CALL CHAR(136,"FFFFC3E77E3CFFFFC0FFC0C0FFC0C0FFC0C0FFC0C0FFC0C0FFC0C0FFC0C0FFC0") :: CALL CHAR(140,"03FF0303FF0303FF0303FF0303FF0303FF0303FF0303FF03") 240 CALL CHAR(132,"080F070F0F0F07030107070FDFDC7C1E0080C060F8F8E0C088FCFCC8E0E0E0F0") 250 CALL CLEAR :: CALL DELSPRITE(ALL) :: VASE=0 260 CALL MAGNIFY(3) 270 RESTORE 9 :: CALL CHAR(143,"FFFF") :: CALL HCHAR(1,1,143,32) :: CALL HCHAR(24,1,143,32) 280 FOR I=4 TO 20 STEP 4 :: CALL HCHAR(I,1,136,32) :: NEXT I 290 CALL SPRITE(#1,128,2,168,120) 300 FOR I=1 TO 12 :: READ A,B :: CALL HCHAR(A,B,137) :: CALL HCHAR(A+1,B,138) :: CALL HCHAR(A+2,B,139) 310 CALL HCHAR(A,B+1,140) :: CALL HCHAR(A+1,B+1,141) :: CALL HCHAR(A+2,B+1,142) :: NEXT I 320 RANDOMIZE :: FOR I=4 TO 20 STEP 8 330 P=INT(RND*31)+1 :: CALL GCHAR(I-1,P,E1) :: CALL GCHAR(I+1,P,E2) :: IF E1<>32 OR E2<>32 THEN 330 340 CALL HCHAR(I,P,32) :: NEXT I 350 FOR I=4 TO 20 STEP 4 360 FOR J=1 TO 2 370 P=INT(RND*26)+2 :: CALL GCHAR(I,P,E1) :: CALL GCHAR(I+1,P,E2) :: CALL GCHAR(I-1,P,E3) :: IF E1=32 OR E2<>32 OR E3<>32 THEN 370 380 CALL HCHAR(I-1,P,33) :: CALL HCHAR(I-2,P,34) :: NEXT J :: NEXT I 390 RUNDE=RUNDE+1 :: MOT=RUNDE :: IF MOT>8 THEN MOT=8 400 CALL STAND(PUNKTE,RUNDE,VASE) :: IF RUNDE>5 THEN CALL SPRITE(#4,40,14,40,150,0,-(MOT+5)) 410 IF RUNDE>7 THEN CALL SPRITE(#5,40,12,8,59,0,MOT+5) 420 CALL SPRITE(#2,36,3,72,20,0,(5+MOT)/2) 430 IF RUNDE>1 THEN CALL SPRITE(#3,36,4,136,200,0,-(5+MOT)/2) 440 IF RUNDE>3 THEN CALL SPRITE(#6,96,12,104,120,0,-MOT) 450 CALL COLOR(14,8,2,1,11,2) :: CALL COLOR(#1,9) :: FOR I=110 TO 310 STEP 10 :: CALL SOUND(-10,I,0,I+2,0,I+3,0) :: NEXT I :: CALL PONGOANZ(PONGO) 460 CALL COINC(ALL,ST) :: IF ST=-1 THEN 690 470 CALL KEY(5,T,S) :: CALL MOTION(#1,0,0) :: IF T=44 THEN 570 ELSE IF T=46 THEN 580 480 IF T=65 THEN 490 ELSE IF T=90 THEN 530 ELSE 460 490 CALL POSITION(#1,R,C) :: R=R+2 :: R=R/8 :: C=C/8 :: IF R<1 OR R>24 THEN 640 500 CALL GCHAR(R+2,C+.5,E1) :: CALL GCHAR(R+2,C+2,E2) 510 IF E1>135 OR E2>135 THEN CALL PATTERN(#1,100) :: CALL MOTION(#1,-8,0) :: CALL SOUND(-1,392,0) 520 GOTO 460 530 CALL POSITION(#1,R,C) :: R=R-2 :: R=R/8 :: IF R>=20.5 THEN 460 ELSE C=C/8 540 CALL GCHAR(R+4,C+.5,E1) :: CALL GCHAR(R+4,C+2,E2) 550 IF E1<>32 OR E2<>32 THEN CALL PATTERN(#1,100) :: CALL MOTION(#1,8,0) :: CALL SOUND(-1,392,0) 560 GOTO 460 570 IF T=44 THEN CALL MOTION(#1,0,-15) :: CALL PATTERN(#1,128) :: CALL SOUND(-1,784,0) :: GOTO 590 580 IF T=46 THEN CALL MOTION(#1,0,15) :: CALL PATTERN(#1,132) :: CALL SOUND(-1,784,0) :: GOTO 590 590 CALL POSITION(#1,X,Y) :: X=X+22 :: X=X/8 :: Y=Y/8 :: CALL GCHAR(X,Y,E1) :: CALL GCHAR(X,Y+1,E2) :: IF E2=32 OR E1=32 THEN 690 600 CALL GCHAR(X-1,Y,E1) :: CALL GCHAR(X-1,Y+1,E2) :: IF E1=33 OR E2=33 THEN 610 ELSE 460 610 CALL MOTION(#1,0,0) :: CALL SOUND(-50,392,0,523,0,659,0) :: IF E1=33 THEN CALL VCHAR(X-2,Y,32,2) :: PUNKTE=PUNKTE+20+5*RUNDE :: VASE=VASE+1 620 IF E2=33 THEN CALL VCHAR(X-2,Y+1,32,2) :: PUNKTE=PUNKTE+20+5*RUNDE :: VASE=VASE+1 630 CALL SOUND(-50,392,0,494,0,587,0) :: CALL STAND(PUNKTE,RUNDE,VASE) :: GOTO 460 640 IF VASE<7 THEN 690 650 PUNKTE=PUNKTE+500+10*RUNDE :: CALL STAND(PUNKTE,RUNDE,VASE) :: CALL MELODY 660 IF VASE=10 THEN BP=200+50*RUNDE :: CALL MELODY3(BP) :: PUNKTE=PUNKTE+BP :: CALL STAND(PUNKTE,RUNDE,VASE) 670 IF PUNKTE-BONUS*5000<5000 THEN 250 680 PONGO=PONGO+1 :: BONUS=BONUS+1 :: CALL MELODY2 :: CALL PONGOANZ(PONGO) :: GOTO 250 690 CALL MOTION(#1,15,0) :: CALL PATTERN(#1,104) :: FOR I=1100 TO 110 STEP-10 :: CALL SOUND(-100,I,0,I+1,5,I-1,5) :: CALL POSITION(#1,Z,S) :: IF Z>=160 THEN 710 700 NEXT I 710 CALL MOTION(#1,0,0) :: CALL LOCATE(#1,167,S) 720 IF PUNKTE-BONUS*5000<5000 THEN 740 730 PONGO=PONGO+1 :: BONUS=BONUS+1 :: CALL MELODY2 740 PONGO=PONGO-1 :: IF PONGO=0 THEN 790 750 CALL PONGOANZ(PONGO) :: CALL LOCATE(#1,167,120) :: CALL PATTERN(#1,128) 760 CALL STAND(PUNKTE,RUNDE,VASE) 770 ON ERROR 690 780 GOTO 460 790 CALL MELODY 800 DISPLAY AT(24,1):" @ 1983 VOLKER BECKER" 810 FOR I=9 TO 11 :: DISPLAY AT(I,3)SIZE(24):"" :: NEXT I 820 DISPLAY AT(10,9)SIZE(9):"GAME OVER" :: FOR I=1 TO 100 :: NEXT I 830 DISPLAY AT(10,9)SIZE(9):"" :: FOR I=1 TO 80 :: NEXT I 840 CALL KEY(5,T,S) :: IF S=0 THEN 820 850 CALL DELSPRITE(ALL) :: 80 TO 10 855 !@P+ 860 SUB STAND(PUNKTE,RUNDE,VASE) :: !@P- 870 DISPLAY AT(1,18)SIZE(6):USING "######":PUNKTE 880 DISPLAY AT(1,6)SIZE(2):USING "##":RUNDE :: DISPLAY AT(1,12)SIZE(2):USING "##":VASE 885 !@P+ 890 SUBEND 900 SUB PONGOANZ(PONGO) 905 GOTO 910 :: I :: !@P- 910 CALL HCHAR(24,3,143,28) 920 IF PONGO=1 THEN SUBEXIT 930 FOR I=1 TO PONGO-1 :: CALL SOUND(-20,220*2^(I/6),0) :: CALL HCHAR(24,2+I,47) :: NEXT I 935 !@P+ 940 SUBEND 950 SUB MELODY 960 DATA 400,698,349,200,523,262,200,30000,277,400,587,294,200,523,262,200,587,294,200,523,262,200,587,294 965 GOTO 970 :: I :: A :: B :: C :: !@P- 970 DATA 200,659,330,200,698,349,200,30000,262,200,3000,175 980 RESTORE 960 990 FOR I=1 TO 12 :: READ A,B,C :: CALL SOUND(A,B,0,C,0) :: NEXT I 995 !@P+ 1000 SUBEND 1010 SUB MELODY2 1020 DATA 200,262,200,330,450,392,200,330,450,392,450,784,200,659,450,784 1025 GOTO 1030 :: I :: A :: B :: !@P- 1030 DISPLAY AT(1,12)SIZE(5):USING "#####":"BONUS" 1040 RESTORE 1010 1050 FOR I=1 TO 8 :: READ A,B :: CALL SOUND(A,B,0) :: NEXT I 1060 FOR I=1 TO 150 :: NEXT I 1070 CALL HCHAR(1,14,143,5) 1075 !@P+ 1080 SUBEND 1090 SUB MELODY3(BP) 1100 DATA 262,220,247,196,220,175,196,165,175,147,165,131 1105 GOTO 1110 :: I :: A :: !@P- 1110 RESTORE 1100 1120 DISPLAY AT(6,13)SIZE(4):USING "####":BP 1130 FOR I=1 TO 12 :: READ A :: CALL SOUND(-100,A,0,A+2,0,A+3,0) :: NEXT I 1140 DISPLAY AT(6,13)SIZE(4):" " 1145 !@P+ 1150 SUBEND 10000 SUB EINLEITUNG 10005 GOTO 10010 :: T :: S :: !@P- 10010 CALL CLEAR :: CALL DELSPRITE(ALL) 10020 DISPLAY AT(1,1):"ZIEL DES SPIELES IST ES PONGO AUF EINE DER BEIDEN OBEREN LEITERN ZU FUEHREN UND DABEI SO VIELE VASEN WIE MOEGLICH ZU SAMMELN." 10030 DISPLAY AT(6,1):"PONGO KANN EINE DER LEITERN NUR DANN UNBESCHADET HINAUF-STEIGEN, WENN ER MINDESTENS 7 VASEN AUF SEINEM WEG NACH OBEN GESAMMELT HAT." 10040 DISPLAY AT(11,1):"BETRITT PONGO EINE DER ZWEI OBER EN LEITERN OHNE MINDES-TENS 7 VASEN ZU HABEN, SO FAELLT ER VON GERUEST." 10050 DISPLAY AT(15,1):"PONGO FAELLT EBENFALLS VON GERUEST, WENN ER AUF EINER LEITER ZUR SEITE GEHT,UEBER ODER IN DIE NAEHE EINES LOCHES GEHT,DEN BILDSCHIRM" 10060 DISPLAY AT(20,1):"AN DEN SEITEN VERLASST ODERVON EINEM WESEN AUF DEM GERUEST BERUEHRT WIRD." 10070 DISPLAY AT(24,0):"WEITER MIT E N T E R" 10080 CALL KEY(5,T,S) :: IF T=13 THEN 10090 ELSE 10080 10090 CALL CLEAR 10100 DISPLAY AT(1,1):"S T E U E R U N G,----------------------------" 10110 DISPLAY AT(4,1):"PONGO BEWEGT SICH MIT','-NACH LINKS '.'-NACH RECHTS 'A'-DIE LEITER 'Z'-DIE LEITER HINUNTER." 10120 DISPLAY AT(10,1):"ZU SPIELBEGINN STEHEN 5 'PONGOS' ZUR VERFUEGUNG." 10130 DISPLAY AT(12,1):"ALLE 5000 PUNKTE GIBT ES EINEN ZUSAETZLICHEN PONGO." 10132 DISPLAY AT(16,1):"PUNKTANZEIGE: -----------------" 10134 DISPLAY AT(18,1):"LINKS-RUNDENCAHL MITT E-ANZ.DER VASEN RECHTS - PUNKTE" 10140 DISPLAY AT(24,1):"WEITER MIT E N T E R" 10150 CALL KEY(5,T,S) :: IF T=13 THEN 10160 ELSE 10150 10160 CALL CLEAR 10170 DISPLAY AT(1,1):"PUNKT WERTUNG :----------------------------" 10180 DISPLAY AT(4,1):"FUER JEDEN GESAMMELTE VASE: 20 + 5 MAL RUNDENZAHL" 10190 DISPLAY AT(7,1):"FUER DAS ERREICHEN EINER DEROBEREN BEIDEN LEITERN MIT MINDESTENS 7 VASEN:500+10 MAL RUNDENZAHL" 10200 DISPLAY AT(12,1):"WENN ES PONGO GELINGT IN EINER RUNDE ALLE 10 VASEN ZUSAMMELN: :200 + 50 MAL RUNDENZAHL" 10210 DISPLAY AT(17,1):"---------------------------" 10220 DISPLAY AT(19,1):"NACH SPIELENDE IRGEND EINE TASTE DRUECKEN FUER EIN NEUES SPIEL." 10225 DISPLAY AT(23,1):"** VIEL SPASS BEIM SPIEL ** BITTE DRUECKEN SIE E N T E R" 10230 CALL KEY(5,T,S) :: IF T=13 THEN 10240 ELSE 10230 10235 !@P+ 10240 SUBEND Quote Link to comment Share on other sites More sharing options...
Manic1975 Posted November 24, 2012 Share Posted November 24, 2012 (edited) I haven't find any problem with assemby games. Also all games in TI basic work OK. In example here is XB game Space junket that works OK 100 REM **************** 110 REM * SPACE JUNKET * 120 REM **************** 130 REM BY TARIK ISANI 140 REM 99'ER VERSION 2.5.1XB 150 REM 160 REM 170 CALL CLEAR :: CALL SCREEN(2) :: RANDOMIZE 180 CALL MAGNIFY(3) :: P,R=1 :: S=3 190 DIM M(8,2),DM(9) 200 DATA -20,0,-20,20,0,20,20,20,20,0,20,-20,0,-20,-20,-20 210 FOR I=1 TO 8 :: FOR J=1 TO 2 :: READ M(I,J) :: NEXT J :: NEXT I 220 FOR I=1 TO 12 :: CALL COLOR(I,16,2) :: NEXT I 230 DISPLAY AT(1,5):"** SPACE JUNKET **": :" BY":" TARIK ISANI" 240 DISPLAY AT(6,1):"MANEUVER YOUR SPACECRAFT,":"CLEARING YOUR FLIGHT PATH OF" 250 DISPLAY AT(8,1):"METEREORIDS, WITHOUT CRASHING":"INTO THEN." 260 DISPLAY AT(11,1):"ROTATE YOUR SHIP BY PRESSING'S' OR 'D', OR MOVE THE":"JOYSTICK LEFT AND RIGHT." 270 DISPLAY AT(15,1):"ACTIVATE YOUR ENGINES BY":"PRESSING 'E',OR MOVING THE JOYSTICK FORWARD." 280 DISPLAY AT(19,1):"TO LAUNCH YOUR MINES PRESS 'Q', OR PRESS THE FIRE":"BUTTON ON THE JOYSTICK." 290 DISPLAY AT(24,1):"(PRESS ANY KEY TO START)" 300 CALL KEY(0,S1,S2) :: IF S2=0 THEN 300 310 DISPLAY AT(12,4)ERASE ALL:"METHOD OF INPUT:": :" 1. JOYSTICK": :" 2. ARROW KEYS" 320 CALL KEY(0,Z1,Z2) :: IF Z1<49 OR Z1>50 THEN 320 330 CALL CLEAR 340 CALL COLOR(1,2,1,3,16,1,4,16,1,5,2,16,6,2,16,7,2,14,8,9,1) 350 CALL CHAR(48,"007E42424242427E") :: CALL CHAR(49,"0008080808080808") 360 CALL CHAR(50,"007E02027E40407E") :: CALL CHAR(51,"007E02027E02027E") 370 CALL CHAR(52,"004242427E020202") :: CALL CHAR(53,"007E40407E02027E") 380 CALL CHAR(54,"007E40407E42427E") :: CALL CHAR(55,"007E020202020202") 390 CALL CHAR(56,"007E42427E42427E") :: CALL CHAR(57,"007E42427E02027E") 400 CALL CHAR(74,"00FFFFFFFFFFFFFFFFFFFF") 410 CALL CHAR(80,"003C40405C444438003844447C44444400446C5454444444007C40407840407C") 420 CALL CHAR(84,"0000000000000000007C44444444447C00444444282810100078444478504844") 430 GO$=CHR$(80)&CHR$(81)&CHR$(82)&CHR$(83)&CHR$(84)&CHR$(85)&CHR$(86)&CHR$(83)&CHR$(87) 440 CALL CHAR(88,"181818183C3C7E7E") 450 CALL CHAR(92,"F8F8C0C0C00000303030300C0C0C0F8F81F1F1F03030300C0C0C0C0000303031F1F") 460 CALL CHAR(96,"00451040220008810024004110022000100048008420020089244008002084") 470 CALL CHAR(100,"80400822080114050B0122084220408081100458000BC01040308024008C0201") 480 CALL CHAR(104,"00000303030303070707071F1F1F1F000000C0C0C0C0C0E0E0E0E0F8F8F8F8") 490 CALL CHAR(108,"000000000103277FFF7F3F1F0F07030100081C3E7CF8F0E0F0E0C08080C08") 500 CALL CHAR(112,"00000038383F3F3F3F3F3F3838000000000000000080FCFCFCFC8") 510 CALL CHAR(116,"0103070F1F3F7FFF7F270301000000000080C08080C0E0F0E0F0F87C3E1C08") 520 CALL CHAR(120,"00001F1F1F07070707030303030300000000F8F8F8E0E0E0E0C0C0C0C0C") 530 CALL CHAR(124,"000103010103070F070F1F3E7C38100080C0E0F0F8FCFEFFFEE4C08") 540 CALL CHAR(128,"0000000000013F3F3F3F0100000000000000001C1CFCFCFCFCFCC1C1C") 550 CALL CHAR(132,"0010387C3E1F0F070F070301010301000000000080C0E4FEFFFEFCF8F0E0C08") 560 CALL CHAR(136,"061D2E3D6E75A6FCCDAF793B3D161F07A0D85CF476AB5FCA6B2D2AF62E4AB08") 570 CALL CHAR(140,"0000000002040A01010A040200000000000000004020508080502040") 580 CALL SOUND(100,900,0) :: CALL SOUND(100,700,0) :: CALL SOUND(100,800,0) :: CALL SOUND(100,1000,0) 590 CALL HCHAR(1,3,48,6) :: DISPLAY AT(1,10):"HIGH:"&RPT$("0",6-LEN(STR$(HS)))&STR$(HS) :: CALL HCHAR(2,12,74,4) 600 CALL HCHAR(1,25,88,S-1) 610 FOR I=2 TO 9 :: CALL SPRITE(#I,136,INT(RND*14+3),1,INT(RND*256+1),INT(RND*10+1),INT(RND*3+1)) :: NEXT I 620 FOR I=2 TO 9 :: DM(I)=0 :: NEXT I 630 DISPLAY AT(1,23):RPT$(CHR$(88),S-1) :: CALL SPRITE(#1,104,7,95,125,0,0) :: CALL SOUND(-50,900,0) :: X,Y=0 640 CALL PATTERN(#1,92) 650 CALL COLOR(#1,9) :: CALL KEY(1,S1,S2) :: CALL COLOR(#1,5) 660 IF S1<>18 THEN 650 ELSE CALL SPRITE(#1,104,11,95,125,0,0) 670 CALL COLOR(#1,11) 680 IF Z1=49 THEN CALL JOYST(1,A,B) :: GOTO 710 690 CALL KEY(1,S1,S2) 700 IF S1=2 THEN A=-4 :: B=0 ELSE IF S1=3 THEN A=4 :: B=0 ELSE IF S1=5 THEN A=0 :: B=4 ELSE A,B=0 710 IF X<>0 OR Y<>0 THEN V=30-MAX(ABS(X),ABS(Y)) :: CALL SOUND(-1000,-6,V,110,V,110,V) 720 IF A<>0 OR B<>4 THEN 750 ELSE X1=X+M(P,1)/10 :: X=MIN(ABS(X1),20)*SGN(X1) 730 Y1=Y+M(P,2)/10 :: Y=MIN(ABS(Y1),20)*SGN(Y1) 740 CALL MOTION(#1,X,Y) :: GOTO 760 750 P=P+SGN(A) :: IF P=0 THEN P=8 ELSE IF P=9 THEN P=1 760 CALL PATTERN(#1,(4*P)+100) :: FOR J=2 TO 9 :: IF DM(J)=1 THEN 770 :: CALL COINC(#J,#1,16,H) :: IF H THEN 900 770 NEXT J :: CALL KEY(1,C,D) :: IF C<>18 THEN 680 780 CALL POSITION(#1,PO1,PO2) 790 CALL SPRITE(#10,140,16,PO1,PO2,M(P,1),M(P,2)) ::CALL COLOR(#1, 8 ) :: CALL PATTERN(#1,92) 800 CALL SOUND(-500,110,5,440,0) 810 FOR J=2 TO 9 :: IF DM(J)=1 THEN 820 :: CALL COINC(#J,#10,16,H) :: IF H THEN 860 820 NEXT J :: VP=VP+1 :: IF VP=3 THEN 840 ELSE 810 830 REM DELETE MISSILE 840 CALL DELSPRITE(#10) :: VP=0 :: GOTO 670 850 REM ASTEROID HIT 860 CALL DELSPRITE(#10) 870 CALL PATTERN(#J,96) :: CALL SOUND(-500,-7,0) :: CALL DELSPRITE(#J) :: DM(J)=1 :: SC=SC+40+R*5 880 VP=0 :: DISPLAY AT(1,1)SIZE(6):RPT$("0",6-LEN(STR$(SC)))&STR$(SC) :: HI=HI+1 :: IF HI=8 THEN 1080 ELSE 670 890 REM CRASH 900 CALL COLOR(#1,9) :: CALL PATTERN(#1,100,#J,96) :: DM(J)=1 910 CALL SCREEN(12) 920 CALL SCREEN(2) :: FOR I=0 TO 30 STEP 2 :: CALL SOUND(-500,-6,I) :: CALL SOUND(-500,-5,I) :: NEXT I 930 FOR I=1 TO 3 :: CALL SCREEN(12) :: CALL SCREEN(2) :: NEXT I :: S=S-1 940 FOR I=1 TO 100 :: NEXT I :: CALL DELSPRITE(#J,#10) :: FOR I=1 TO 100 :: NEXT I 950 HI=HI+1 :: IF HI=8 THEN 1080 960 IF S<>0 THEN P=1 :: GOTO 630 970 CALL DELSPRITE(#1) :: FOR I=30 TO 0 STEP-1 :: CALL SOUND(-200,-5,I) :: NEXT I 980 FOR I=1 TO 3 :: CALL SCREEN(12) :: CALL SOUND(-200,-5,0) :: CALL SCREEN(2) :: CALL SOUND(-200,-6,0) :: NEXT I 990 CALL SOUND(-400,-7,0) 1000 IF SC<=HS THEN 1040 ELSE HS=SC 1010 FOR I=1 TO 200 :: NEXT I :: DISPLAY AT(1,15)SIZE(6):RPT$("0",6-LEN(STR$(HS)))&STR$(HS) 1020 FOR I=1 TO 10 :: CALL COLOR(5,2,7,6,2,7) :: CALL SOUND(-200,900,0) 1030 CALL COLOR(5,2,16,6,2,16) :: CALL SOUND(-200,800,0) :: NEXT I 1040 X,Y,SC,HI=0 :: R,P=1 :: S=3 :: DISPLAY AT(12,10):GO$ 1050 CALL COLOR(7,14,2) :: CALL KEY(1,A,B) :: CALL COLOR(7,2,14) :: IF B=0 THEN 1050 ELSE CALL HCHAR(12,1,32,32) 1060 GOTO 580 1070 REM ALL DESTROYED 1080 CALL DELSPRITE(ALL) 1090 CALL SOUND(200,9999,30) :: CALL SOUND(20,1100,0) :: CALL SOUND(60,9999,30) :: CALL SOUND(300,1100,0) 1100 P=1 :: R=MIN(R+1,4) :: HI=0 :: IF S=0 THEN 970 ELSE 610 Edited November 24, 2012 by Manic1975 Quote Link to comment Share on other sites More sharing options...
Manic1975 Posted November 24, 2012 Share Posted November 24, 2012 Here are samples of working and nonworking games. I hope it will help. Quote Link to comment Share on other sites More sharing options...
Tursi Posted November 25, 2012 Share Posted November 25, 2012 Is sprite collision detection checking off-screen sprites? XB keeps all the sprites (well, the 28 it uses) active but off the bottom of the screen. (I thought we had looked at that early on...?) Quote Link to comment Share on other sites More sharing options...
matthew180 Posted November 27, 2012 Author Share Posted November 27, 2012 It seems there is a bug in the F18A v1.3 HDL. Sprites continue to be processed beyond the margin (line 191 or 240 in ROW30 mode), which means collisions are also being processed. I believe the 9918A/28/29 can not report collisions of off-screen sprites due to the location of the collision detection circuit on the real chips. I'll confirm my theory as soon as I get a minute to change the HDL and test the new firmware. Quote Link to comment Share on other sites More sharing options...
+5-11under Posted November 27, 2012 Share Posted November 27, 2012 It seems there is a bug in the F18A v1.3 HDL. Sprites continue to be processed beyond the margin (line 191 or 240 in ROW30 mode), which means collisions are also being processed. I believe the 9918A/28/29 can not report collisions of off-screen sprites due to the location of the collision detection circuit on the real chips. I'll confirm my theory as soon as I get a minute to change the HDL and test the new firmware. If an existing user wanted to upgrade their F18A to new firmware, is there a way to do it locally, assuming one has the proper programmer? Quote Link to comment Share on other sites More sharing options...
matthew180 Posted November 28, 2012 Author Share Posted November 28, 2012 Yes, I will be making the bit-stream (or firmware if you want to call it that) available, as well as some sort of update service for the cost of shipping. I wish I had a way to provide an in-place update, but even though the F18A has the ability via the GPU, I have no way to get the 700K bit-stream on to the 99/4A or other various systems. Plus I have not yet written the software to do the actual in-place update if the file was available somehow. For those who want to do the update themselves, you need a USB JTAG programmer device. The best inexpensive one I have found is the JTAG-HS1 provided by Digilent (the same company who makes a large number of FPGA dev-boards): https://www.digilentinc.com/Products/Detail.cfm?NavPath=2,395,922&Prod=JTAG-HS1 I'll also put together instructions for doing the update via a JTAG programmer. Quote Link to comment Share on other sites More sharing options...
+5-11under Posted November 28, 2012 Share Posted November 28, 2012 Yes, I will be making the bit-stream (or firmware if you want to call it that) available, as well as some sort of update service for the cost of shipping. I wish I had a way to provide an in-place update, but even though the F18A has the ability via the GPU, I have no way to get the 700K bit-stream on to the 99/4A or other various systems. Plus I have not yet written the software to do the actual in-place update if the file was available somehow. For those who want to do the update themselves, you need a USB JTAG programmer device. The best inexpensive one I have found is the JTAG-HS1 provided by Digilent (the same company who makes a large number of FPGA dev-boards): https://www.digilent...2&Prod=JTAG-HS1 I'll also put together instructions for doing the update via a JTAG programmer. Sounds good! Even without an update, I think we all realized this solution was a 99 to 99.99% solution, and not a 100% solution, so it's all good. Sleep well. Quote Link to comment Share on other sites More sharing options...
+acadiel Posted November 28, 2012 Share Posted November 28, 2012 My 844USB has a "ISP" port on it... never have used it, but supposedly it's for programming JTAG devices. Will that work? Quote Link to comment Share on other sites More sharing options...
matthew180 Posted November 28, 2012 Author Share Posted November 28, 2012 I don't know. I've never heard of an "ISP" post. Are you sure it is not "SPI"? If it has the standard 6 pins for JTAG (VDD, GND, TCK, TDO, TDI, TMS), and can be recognized by the Digilent or Xilinx tools, then you could probably use it. I like the Digilent device because I know it works, it is inexpensive as far as programmers go, and it has an adapter that matches the JTAG plug on the F18A. Quote Link to comment Share on other sites More sharing options...
Manic1975 Posted November 28, 2012 Share Posted November 28, 2012 (edited) Matthew I think it is best to buy JTAG HS1 Programming Cable for us living outside US. Please test and prepare manual how to update F18A with this cable. One question. Is this cable OK to use it one day with Tursis & Ksarul grom rom module? Edited November 28, 2012 by Manic1975 Quote Link to comment Share on other sites More sharing options...
matthew180 Posted November 29, 2012 Author Share Posted November 29, 2012 I don't know, it depends on what kind of board design is used, as well as the microcontroller's interface connections. Quote Link to comment Share on other sites More sharing options...
Tursi Posted November 29, 2012 Share Posted November 29, 2012 One question. Is this cable OK to use it one day with Tursis & Ksarul grom rom module? There's no intention to require a programming cable for the GROM AVR simulator, you'll be able to write to it as if it were a normal GROM emulator. For programming the ROM side I think you'll need an EPROM programmer still...? Not sure what the plans on that side of the cart are. The off-screen sprite issue is a "gotcha" because there's a note in one of the reference guides somewhere that says "even off-screen sprites", but it turns out not to be true in practice. I was sure we tested this, but apparently not well enough. Sorry about that. Quote Link to comment Share on other sites More sharing options...
matthew180 Posted November 30, 2012 Author Share Posted November 30, 2012 (edited) No apology necessary, a few bugs are inevitable. I actually surprised something like this did not come up sooner. I did test the sprite collision flag carefully, and I knew it was only affected by the pattern bits of only the four sprites currently being displayed. When exactly I forgot about that, I don't know. If you look at where the collision detection circuit is on the block diagram in the 9918A datasheet, it happens in the block called "color - priority - multiplexer and collision detect". A collision will be detected even if a sprite has a color of transparent, the collision detection is based on the pattern bits and not the sprite's color. Also, only the first four sprites on a line will be considered in the collision test. However, the F18A will test the collision of all 32 sprites on a line if the USR1 jumper is on (i.e. all 32 sprites can be displayed on a line). I have a preliminary fix working, but I need to test it more. I'm also going to take the opportunity to fix the T40 mode bug when the ROW30 flag is set. The off-screen sprite issue is a "gotcha" because there's a note in one of the reference guides somewhere that says "even off-screen sprites", but it turns out not to be true in practice. I suppose, but it depends on the context of the reference, since "collision detection" does not necessarily mean "the 9918A's C flag of the status register". Update: Hmm, it seems the datasheet does specifically state that collisions are detected by partial and off-screen sprites. However, that does not coincide with tests on a real 9918A. The datasheet states: "The VDP checks each pixel position for coincidence during the generation of the pixel regardless of where it is located on the screen." The key here being that coincidence is checked "during the generation of the pixel", which only happens in the visible part of the screen and for only up to four sprites per horizontal line. Edited November 30, 2012 by matthew180 Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted November 30, 2012 Share Posted November 30, 2012 (edited) Hmm, it seems the datasheet does specifically state that collisions are detected by partial and off-screen sprites. However, that does not coincide with tests on a real 9918A. I would have expected the real 9918A to only detect collisions with pixels on screen (collision including transparent *)). Now one thing is the vertical aspect of it, another might be the horizontal aspect. First one may say no, the range 0 thru 255 will display any sprites, but remember the pixel patterns might not be in column one of a sprite, so position 255 (and even down to 225) may hide a sprite. Again I would expect no collision to take place if a sprite is outside the pixels generated for the screen, the 256 by 192 visible pixels. But it’s worth testing on both incarnations. Also with early clock on, you can have sprites off screen, just at the other end. The early clock shifts 32 pixels (the width of sprites being both double sized and magnified). A sprite, not magnified, with one pixel in the upper left corner, has quite a few positions to travel in without showing its face. Again I trust no collision to take place outside the visible area, but again, better test to be sure. *) Can't really thing of an instance where this may come to good use, but I guess it was the easiest way to implement it originally. If that is true, they could have made transparent sprites a special case and changed the appearance to orange, brown or dark gray. - Ah, think Marc Hull used it to detect pattern collisions with background characters. Nice trick (lifting the character patterns into a transparent sprite). Edited November 30, 2012 by sometimes99er Quote Link to comment Share on other sites More sharing options...
matthew180 Posted November 30, 2012 Author Share Posted November 30, 2012 Good points about the horizontal collisions. I tested every condition you mentioed. :-) It is easy to forget about the ECB (early clock bit) except when you are working on the hardware to implement the functionality. What is interesting about the way the 9918A detects collisions is that the current tile pattern bits are also available in the detection circuit, and it would have been relatively easy to detect a tile collision as well. One unused bit in VR0 or VR1 to enable/disable the tile collision test would have been really useful. Hmm, I wonder why I didn't do something like that?? Uh-oh, I feel this bug fix is starting to include expanded functionality... Quote Link to comment Share on other sites More sharing options...
Manic1975 Posted December 11, 2012 Share Posted December 11, 2012 Hello Matthew. Is there any news abou bug fix? Have you consider how to distribute update? Quote Link to comment Share on other sites More sharing options...
matthew180 Posted December 11, 2012 Author Share Posted December 11, 2012 I have a working fix, the trick is testing it sufficiently, especially since a lot of my gear is packed up due to a move I don't have many of the programs I'd like to test. As for distribution, I'm still working on what I might be able to offer, but anyone willing to get the programming cable I linked to above will have the quickest opportunity to update their F18A. If I get the time to write the program, I'm considering a possible in-place update, but it will require the user to have a big enough disk sub-system (like a CF7 or hard disk). Quote Link to comment Share on other sites More sharing options...
moulinaie Posted December 14, 2012 Share Posted December 14, 2012 I have a working fix, the trick is testing it sufficiently, especially since a lot of my gear is packed up due to a move I don't have many of the programs I'd like to test. As for distribution, I'm still working on what I might be able to offer, but anyone willing to get the programming cable I linked to above will have the quickest opportunity to update their F18A. If I get the time to write the program, I'm considering a possible in-place update, but it will require the user to have a big enough disk sub-system (like a CF7 or hard disk). I vote for the in-place update! I wouldn't like to open my TI again... Guillaume. Quote Link to comment Share on other sites More sharing options...
slinkeey Posted December 14, 2012 Share Posted December 14, 2012 Could put a connection on the back of your TI just for updating the F18A.. Quote Link to comment Share on other sites More sharing options...
RXB Posted December 14, 2012 Share Posted December 14, 2012 This is why the Bios and Drivers exist. To fix any issues that are not seen when you release hardware. Quote Link to comment Share on other sites More sharing options...
+arcadeshopper Posted December 17, 2012 Share Posted December 17, 2012 I have a working fix, the trick is testing it sufficiently, especially since a lot of my gear is packed up due to a move I don't have many of the programs I'd like to test. As for distribution, I'm still working on what I might be able to offer, but anyone willing to get the programming cable I linked to above will have the quickest opportunity to update their F18A. If I get the time to write the program, I'm considering a possible in-place update, but it will require the user to have a big enough disk sub-system (like a CF7 or hard disk). You could use Fred's hdx code possibly to load from a pc with serial? Greg Quote Link to comment Share on other sites More sharing options...
matthew180 Posted December 17, 2012 Author Share Posted December 17, 2012 That is not a bad idea, but I think the number of people with the HXD setup are as few (or less) than those with CF7 devices. Quote Link to comment Share on other sites More sharing options...
+retroclouds Posted December 17, 2012 Share Posted December 17, 2012 I think that for the TI-99/4A the CF7+/nanopeb is the way to go. I doubt there is a single TI'99er out there having a F18A but who is without one of these compact flash devices. For the Colecovision best bet is probably the Atarimax 128-in-1 Flash multicart or Ultimate SD Cartridge. Quote Link to comment Share on other sites More sharing options...
Manic1975 Posted December 17, 2012 Share Posted December 17, 2012 I think that for the TI-99/4A the CF7+/nanopeb is the way to go. I doubt there is a single TI'99er out there having a F18A but who is without one of these compact flash devices. For the Colecovision best bet is probably the Atarimax 128-in-1 Flash multicart or Ultimate SD Cartridge. I agree! It is best configuration. Matthew do upgrade this way! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.