Jump to content
IGNORED

F18A


matthew180

Recommended Posts

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

Link to comment
Share on other sites

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 by Manic1975
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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 by matthew180
Link to comment
Share on other sites

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 by sometimes99er
Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 2 weeks later...

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...