Jump to content
IGNORED

A piece of TI-99/4A cartridge history for the taking (strings attached).


Omega-TI

Recommended Posts

Okay, here's the deal, I have an early FinalGROM development board to give away.  It has one button, not two and is 512K, not 1 Meg.  Due to shipping, this offer is available to continental U.S. members only, sorry.  It'll arrive in a flat rate USPS box. Here is a photo of the cartridge...

 

167318284_APieceofHistory.thumb.jpg.f900ca9d279a908b425e0906a8006dda.jpg

 

Did I mention there were "strings attached"?  This will be a contest to see who can do the best conversion to T80XB for a nice 80 column display, or even compiled into either E/A5 format, or in cartridge .BIN format.  (It's actually not possible to compile at this time, so a simple conversion is all that necessary).

 

When completed, post your entries below.  On November 15th there will be a one week poll posted for users to judge the winner.  Once the winner is announced, I'll get their mailing address in a PM so I can immediately send it out to them so they'll have a new toy to play with before Christmas.

 

The game to convert is the BASIC game:  B1-BOMBER

 

GOOD LUCK!

It's truly a rare cartridge and piece of TI history that spawned the most popular cartridge ever.

 

 

 

 

 

 

 

 

 

Edited by Omega-TI
Clarified
Link to comment
Share on other sites

I figured I should post the program listing for anyone wanting to give it a go.  This game, while devoid of graphics has special place in my heart.

 

As the game came originally...

2037771144_B-1Photo.thumb.jpg.4c7c4a9bf4e0cb15d0a414d14928e067.jpg

 

The BASIC game listing

<spoiler>

1 REM 5/18/82 
2 REM BY R.E.REED,JR. 
5 RANDOMIZE 
10 DIM C(10,2),C$(12)
15 CALL CLEAR
20 FOR I=1 TO 5
21 PRINT 
22 NEXT I
23 PRINT TAB(18);"* B-1 NUCLEAR BOMBER GAME *"
24 PRINT 
25 PRINT TAB(24);"COPYWRITE 1980 BY"
26 PRINT 
27 PRINT TAB(27);"AVALON HILL"
30 PRINT TAB(23);"MICROCOMPUTER GAMES"
31 FOR I=1 TO 4
32 PRINT 
33 NEXT I
40 FOR I=1 TO 1000
41 NEXT I
42 PRINT "WORKING..."
43 PRINT 
50 N0=10
51 N1=20
60 N2=N0+N1
61 CALL CHAR(128,"1824241800000000")
70 DIM N$(30),T(30,3)
71 FOR I=1 TO 12
72 READ C$(I)
73 NEXT I
74 DATA "AU","EC","EV","PH","NA","AL"
75 DATA "CO","ST","RA","SE","AR","BO"
76 FOR I=1 TO N2
77 READ N$(I),T(I,1),T(I,2)
78 NEXT I
81 DATA "ARKHANGEL",8261,5922,"ASTRAKHAN",8631,7947
82 DATA "KIYEV",7391,7467,"LENINGRAD",7661,6427
83 DATA "MOSKVA",7956,6937,"MURMANSK",8056,5452
84 DATA "SEVASTOPOL",7506,8152,"SVERDLOVSK",9311,6682
85 DATA "VOLGOGRAD",8331,7692,"YEREVAN",8381,8657
86 DATA "DUBOVKA",8350,7650,"KHARKOV",7783,7450
87 DATA "KONOSHA",8153,6325,"LIPETSK",8100,7210
88 DATA "OCHAMCHIRA",8060,8400,"ODESSA",7360,8050
89 DATA "ONEGA",8147,5976,"PECHENGA",7976,5410
90 DATA "PINSK",7115,7235,"PODOLSK",7900,7010
91 DATA "PSKOV",7475,6637,"ROSTOV",7990,6802
92 DATA "SARPA",8455,7930,"SYKTYVKAR",8825,6200
93 DATA "TALLINN",7270,6415,"TBILISI",8415,8435
94 DATA "UKHTA",7737,5925,"VINNITSA",7200,7585
95 DATA "VYBORG",7575,6300,"YARANSK",8575,6740
96 N$(0)="THULE AFB"
100 A9=25000
101 A0=100
102 C0=10
103 S=4500
104 P=6
105 F9=0
106 TT=0
107 E=1.75
110 X=5500+RND*1500
111 Y=3500+RND*1000
120 FOR I=1 TO N2
121 T(I,3)=0
122 NEXT I
123 A=INT(25000*RND)
124 A1=A
125 R9=0
130 CC=INT(RND*360)
131 C1=CC
132 T9=INT(RND*N0+1)
133 T8=0
134 F=18500
140 FOR I=1 TO 10
141 C(I,1)=0
142 NEXT I
143 F$=""
144 FOR I=1 TO 5
150 F$=F$&CHR$(INT(RND*26)+65)
151 NEXT I
152 L9=.3
160 PRINT "YOU ARE FLYING A B-1 BOMBER OUT OF THULE AFB. YOU ARE INALERT STATUS ORBITING OVER  THE ARTIC."
170 PRINT 
180 PRINT "  *** FLASH-HOT WAR ***"
181 PRINT 
182 PRINT "YOUR PRIMARY TARGET IS       ";N$(T9);"."
183 PRINT 
190 PRINT "YOUR FAILSAFE CODE IS "
191 PRINT " '";F$;"'.";" MEMORIZE IT!"
192 PRINT 
200 PRINT "YOUR ALTERNATE TARGETS ARE:"
201 J=0
202 FOR I=1 TO N0
203 IF I=T9 THEN 230
210 J=J+1
211 PRINT TAB((J-1)*15+2);N$(I);
212 IF J<2 THEN 230
220 J=0
221 IF I>=9 THEN 230
222 PRINT 
230 NEXT I
231 PRINT 
232 PRINT 
233 INPUT "PRESS ENTER TO CONTINUE":A$
234 PRINT 
240 PRINT "SOVIET DEFENSE COMPLEXES    ARE:"
241 PRINT 
250 J=0
251 FOR I=N0+1 TO N2
252 J=J+1
260 PRINT TAB((J-1)*12+2);N$(I);
261 IF J<2 THEN 280
270 J=0
271 PRINT 
280 NEXT I
281 PRINT 
283 PRINT "GOOD LUCK!"
284 PRINT 
290 GOSUB 670
291 A$=""
292 PRINT 
293 INPUT "COMMAND: ":A$
294 PRINT 
295 IF LEN(A$)<2 THEN 310
300 A$=SEG$(A$,1,2)
301 I=0
302 I=I+1
303 IF A$=C$(I)THEN 350
304 IF I<12 THEN 302
310 PRINT "LEGAL COMMANDS ARE: COURSE, ALTITUDE, STATUS, RADAR,    NAVIGATOR, SEARCH, AUTO"
321 PRINT "PILOT, EVASIVE ACTION, ECM, PHOENIX MISSLE, ARM BOMB,   BOMB."
330 T0=TT+3+INT(5*RND)
340 GOTO 1020
350 ON I GOTO 430,970,740,820,560,360,380,700,650,610,390,470
360 INPUT "NEW ALTITUDE ? ":A1
361 IF A1>A9 THEN 362 ELSE 364
362 A1=A9
363 GOTO 370
364 IF A1<A0 THEN 365 ELSE 370
365 A1=A0
370 T0=TT+13+INT(15*RND)
371 GOTO 1020
380 INPUT "NEW COURSE ? ":C1
381 GOTO 370
390 IF F9=2 THEN 420
391 A$=""
392 INPUT "FAIL SAFE CODE ? ":A$
393 IF A$<>F$ THEN 400
394 F9=1
400 IF F9=0 THEN 410
401 PRINT "BOMB ARMED"
402 L9=10*L9
403 GOTO 370
410 PRINT "WRONG CODE."
411 GOTO 370
420 PRINT "BOMB ALREADY DROPPED."
421 GOTO 370
430 I=0
431 J=0
432 K=0
433 INPUT "TIME FOR AUTOPILOT          (SEC,MIN,HR)":I,J,K
460 I=-I*(I>0)
461 J=-J*(J>0)
462 K=-K*(K>0)
463 T2=TT+I+(60*J)+(3600*K)
464 IF T2<>TT THEN 466
465 T2=T2+1
466 GOTO 1020
470 IF F9=2 THEN 420
471 IF F9=0 THEN 530
472 A$=""
473 INPUT "TARGET ? ":A$
480 IF LEN(A$)<2 THEN 540
481 A$=SEG$(A$,1,2)
482 GOSUB 2000
483 IF (I=0)+(I>N0)THEN 540
490 GOSUB 2010
491 IF FR>250 THEN 550
492 A$=""
493 INPUT "CONFIRM DROP (Y-N)":A$
500 IF A$="" THEN 370
501 IF SEG$(A$,1,1)<>"Y" THEN 370
502 PRINT N$(I);" DESTROYED."
510 L9=L9/15
520 T8=I
521 S=S+250
522 A0=A0+50
523 F9=2
524 T0=TT+3+INT(5*RND)
525 GOTO 1020
530 PRINT "BOMB NOT YET ARMED."
531 GOTO 370
540 PRINT "IMPROPER TARGET."
541 GOTO 370
550 PRINT N$(I);" NOT IN RANGE."
551 GOTO 370
560 A$=""
561 INPUT "WHERE TO ? ":A$
562 IF LEN(A$)<2 THEN 600
563 A$=SEG$(A$,1,2)
570 GOSUB 2000
571 IF A$="TH" THEN 580
572 IF I=0 THEN 600
580 GOSUB 2010
581 GOSUB 2020
582 PRINT N$(I);" BEARS ";
583 FX$=STR$((INT(FA*10))/10)
584 PRINT FX$;CHR$(128);" TRUE"
585 PRINT "RANGE:";INT(FR+.5);"KM."
590 T0=TT+40+INT(41*RND)
591 GOTO 1020
600 PRINT "NOT ON THE MAP."
601 GOTO 590
610 I=0
611 J=1E4
612 FOR K=N0+1 TO N2
613 FI=I
614 I=K
615 GOSUB 2010
616 L=FR
617 I=FI
618 IF L>J THEN 640
620 IF T(K,3)=2 THEN 640
630 FI=I
631 I=K
632 GOSUB 2020
633 I=FI
634 IF (ABS(CC-FA)>45)*(ABS(CC-FA)<315)THEN 640
635 J=L
636 I=K
640 NEXT K
641 IF I>0 THEN 580
642 PRINT "NO COMPLEX FOUND."
643 GOTO 590
650 PRINT "CONTACTS:"
651 GOSUB 670
652 IF J<>0 THEN 660
653 PRINT TAB(5);"NO CONTACTS."
660 T0=TT+5+INT(RND*11)
661 GOTO 1020
670 PRINT 
671 J=0
672 FOR I=1 TO 10
673 IF C(I,1)=0 THEN 690
674 J=1
680 GOSUB 2030
681 PRINT FM$;" WILL INTERCEPT IN";C(I,2)-TT;"SECONDS."
690 NEXT I
691 RETURN 
700 PRINT "COURSE: ";
701 CX$=STR$((INT(CC*10))/10)
702 PRINT TAB(19);CX$;CHR$(128);"TRUE"
703 PRINT "SPEED:";TAB(18);S;"KPH"
704 PRINT "ALTITUDE:";TAB(18);A;"M"
710 PRINT "ENOUGH FUEL"
711 PRINT "REMAINING TO FLY:";TAB(18);F;"KM"
720 IF F9=2 THEN 730
721 PRINT "PRIMARY TARGET: ";TAB(19);N$(T9)
730 PRINT "PHOENIX MISSLES:";TAB(18);P
731 T0=TT+20+INT(RND*21)
732 GOTO 1020
740 A1=200+INT(300*RND)
741 IF RND>=.5 THEN 743
742 A1=-A1
743 A=A+A1
750 IF A<0 THEN 1470
751 A1=A
752 C1=60+INT(60*RND)
760 IF RND<=.5 THEN 762
761 C1=-C1
762 CC=CC+C1
763 CC=CC+360*(CC>360)-360*(CC<0)
770 C1=CC
771 FOR I=1 TO 10
772 IF C(I,1)=0 THEN 810
780 J=(8+2*(C(I,1)<10))/(C(I,2)-TT)
782 IF J<=.95 THEN 790
783 J=.95
790 IF RND>J THEN 810
791 GOSUB 2030
792 PRINT FM$;" LOSES TARGET LOCK";
800 IF C(I,1)<=10 THEN 802
801 PRINT "AND RETURNS TO BASE";
802 PRINT "."
803 C(I,1)=0
810 NEXT I
811 T0=TT+10+INT(21*RND)
812 GOTO 1020
820 IF P=0 THEN 870
821 A$=""
822 PRINT "PHOENIX MISSLE ARMED."
823 INPUT "TARGET ? ":A$
830 IF A$="" THEN 900
831 IF LEN(A$)<2 THEN 880
832 A$=SEG$(A$,1,2)
833 GOSUB 2000
840 IF I<N0+1 THEN 880
841 GOSUB 2010
842 IF FR>200 THEN 890
843 PRINT 
844 PRINT "PHEONIX MISSLE AWAY!"
850 PRINT N$(I);" DEFENSE COMPLEX"
851 PRINT "DESTROYED."
852 T(I,3)=2
853 P=P-1
860 T0=TT+3+INT(RND*5)
861 GOTO 1020
870 PRINT "NO MORE MISSLES."
871 GOTO 860
880 PRINT "INVALID TARGET."
881 GOTO 860
890 PRINT N$(I);" OUT OF RANGE."
891 GOTO 860
900 J=1E4
901 K=0
902 FOR I=1 TO 10
903 IF C(I,1)=0 THEN 920
910 IF C(I,2)-TT>J THEN 920
911 J=C(I,2)-TT
912 K=I
920 NEXT I
921 PRINT "PHEONIX MISSLE AWAY!"
922 P=P-1
923 IF K=0 THEN 960
930 IF J>10 THEN 960
931 IF (C(K,1)<10)*(RND>.6)THEN 960
940 IF (C(K,1)>10)*(RND>.85)THEN 960
941 FI=I
942 I=K
943 GOSUB 2030
944 I=FI
945 PRINT FM$;" DESTROYED."
950 C(K,1)=0
951 GOTO 860
960 PRINT "MISSED!"
961 GOTO 860
970 FOR I=1 TO 10
971 IF C(I,1)=0 THEN 1010
972 J=E*(.5+5/(C(I,2)-TT))
980 IF J<=.97 THEN 982
981 J=.97
982 IF RND>J THEN 1010
983 GOSUB 2030
984 PRINT FM$;
990 IF C(I,1)>10 THEN 991 ELSE 994
991 PRINT " LOSES TARGET LOCK"
992 PRINT "AND RETURNS TO BASE."
993 GOTO 1000
994 PRINT " SELF-DESTRUCTS."
1000 C(I,1)=0
1010 NEXT I
1011 E=E*(.7+.3*RND)
1012 T0=TT+3+INT(5*RND)
1013 GOTO 1020
1020 T3=T0
1021 I9=1
1022 IF T0>TT THEN 1060
1023 I9=0
1024 T3=INT(RND*301)+TT
1030 FOR I=1 TO 10
1031 IF C(I,1)=0 THEN 1050
1032 IF C(I,2)>=T3 THEN 1040
1033 T3=C(I,2)
1040 IF TT>=C(I,2)-10 THEN 1050
1041 IF C(I,2)-10>=T3 THEN 1050
1042 T3=C(I,2)-10
1050 NEXT I
1051 IF (T2<=TT)+(T3<T2)THEN 1060
1052 T3=T2
1053 I9=1
1060 T0=T3-TT
1061 A2=A0*T0
1062 C2=C0*T0
1070 IF A2>ABS(A-A1)THEN 1071 ELSE 1073
1071 A=A1
1072 GOTO 1080
1073 A=A+A2*SGN(A1-A)
1080 IF C2>ABS(360*ABS(CC-C1)>180)-ABS(CC-C1)THEN 1100
1090 CC=CC+C2*SGN(C1-CC)
1091 CC=CC-360*(CC<0)+360*(CC>360)
1092 GOTO 1110
1100 CC=C1
1110 X=X+S*T0*SIN(CC*3.14159265/180)/3600
1120 F=F-INT(S*(T3-TT)/3600)
1130 Y=Y-S*T0*COS(CC*3.14159265/180)/3600
1131 TT=T3
1140 IF F<0 THEN 1490
1150 I=0
1151 I=I+1
1152 IF C(I,1)=0 THEN 1210
1153 IF C(I,2)>TT THEN 1200
1160 PRINT "NUCLEAR AIRBURST!"
1161 R9=1
1162 C(I,1)=0
1163 I9=1
1170 A=A+INT(3000*RND*SGN(.5-RND))
1171 IF A<0 THEN 1470
1180 A1=A
1181 F=INT(F*RND)
1182 S=INT(S*(.5+.5*RND))
1190 IF RND<.15 THEN 1480 ELSE 1210
1200 IF C(I,2)>TT+10 THEN 1210
1201 GOSUB 2030
1202 PRINT FM$;" IN PHEONIX RANGE."
1203 I9=1
1210 IF I<10 THEN 1151
1211 IF F9=2 THEN 1270
1220 FOR I=1 TO N0
1221 GOSUB 2010
1222 J=FR
1223 IF J>250 THEN 1240
1224 IF T(I,3)<>0 THEN 1240
1230 PRINT N$(I);" IN BOMB RANGE."
1231 T(I,3)=1
1232 I9=1
1240 IF T(I,3)<>1 THEN 1260
1241 IF J<250 THEN 1260
1250 PRINT N$(I);" NO LONGER IN"
1251 PRINT "BOMB RANGE."
1252 T(I,3)=0
1260 NEXT I
1270 FOR I=N0+1 TO N2
1271 IF T(I,3)=2 THEN 1440
1280 IF ABS(X-T(I,1))>750 THEN 1440
1290 IF ABS(Y-T(I,2))>750 THEN 1440
1291 GOSUB 2010
1292 J=FR
1293 IF J>750 THEN 1440
1300 IF J>200 THEN 1320
1301 IF T(I,3)=1 THEN 1320
1302 T(I,3)=1
1310 PRINT N$(I);" DEFENSE COMPLEX"
1311 PRINT "IN PHEONIX MISSLE RANGE."
1312 I9=1
1320 IF T(I,3)<>1 THEN 1340
1321 IF J<200 THEN 1340
1322 T(I,3)=0
1330 PRINT N$(I);" DEFENSE COMPLEX"
1331 PRINT "OUT OF PHEONIX MISSLE RANGE."
1340 IF RND>L9*(T0/300)*(A^.125)THEN 1440
1350 K=0
1351 K=K+1
1352 IF C(K,1)=0 THEN 1360
1353 IF K<10 THEN 1351
1354 GOTO 1440
1360 IF RND>.5 THEN 1380
1370 C(K,1)=INT(9*RND+1)
1371 M=6500
1372 GOTO 1390
1380 C(K,1)=21+2*INT(RND*7)
1381 M=5000
1390 GOSUB 2020
1391 L=(FA-CC)*.0174532
1392 S1=S*SIN(L)
1393 S2=S*COS(L)
1400 L=SQR(M*M-S1*S1)+SGN(3.141593-ABS(L))*ABS(S2)
1410 GOSUB 2010
1411 FI=I
1412 I=K
1413 GOSUB 2030
1414 I=FI
1415 C(K,2)=TT+INT(3600*FR/L+1)
1416 PRINT 
1420 PRINT N$(I);" DEFENSE COMPLEX"
1421 PRINT "LAUNCHES A ";FM$;"."
1430 I9=1
1440 NEXT I
1441 I=0
1442 GOSUB 2020
1443 L=ABS(CC-FA)
1444 GOSUB 2010
1450 IF ((L<30)+(L>330))*(FR<6500)*(TT>2000)THEN 1500
1460 IF I9=1 THEN 290 ELSE 1020
1470 PRINT "B-1 CRASHES INTO HILLSIDE."
1471 R9=2
1472 GOTO 1510
1480 PRINT "B-1 DESTROYED."
1481 R9=2
1482 GOTO 1510
1490 PRINT "B-1 RUNS OUT OF FUEL."
1491 GOTO 1470
1500 PRINT "B-1 LANDS AT THULE AFB.     MISSION COMPLETE."
1510 PRINT "MISSION SUMMARY:"
1511 IF T8=0 THEN 1540
1520 IF T8=T9 THEN 1521 ELSE 1523
1521 PRINT "PRIMARY";
1522 GOTO 1530
1523 PRINT "SECONDARY";
1530 PRINT " TARGET, ";N$(T8);"DESTROYED."
1540 PRINT "DEFENSE COMPLEXES DESTROYED:"
1541 J=0
1542 FOR I=N0 TO N2
1550 IF T(I,3)<>2 THEN 1560
1551 PRINT TAB(5);N$(I)
1552 J=1
1560 NEXT I
1561 IF J<>0 THEN 1570
1562 PRINT "NONE."
1570 IF R9<>1 THEN 1580
1571 PRINT "THE CREW WILL DIE FROM      RADIATION EXPOSURE."
1580 IF R9<>2 THEN 1590
1581 PRINT "CREW DEAD."
1590 A$=""
1591 INPUT "GO AGAIN (Y/N)":A$
1592 A$=A$&" "
1593 IF SEG$(A$,1,1)="Y" THEN 100 ELSE 9999
2000 I=0
2001 I=I+1
2002 IF SEG$(N$(I),1,2)=A$ THEN 2003 ELSE 2004
2003 RETURN 
2004 IF I<N2 THEN 2001
2005 I=0
2006 RETURN 
2010 IF I<>0 THEN 2013
2011 FR=SQR(X*X+Y*Y)
2012 RETURN 
2013 FX=X-T(I,1)
2014 FY=Y-T(I,2)
2015 FR=SQR(FX*FX+FY*FY)
2016 RETURN 
2020 FX=X-T(I,1)
2021 FY=Y-T(I,2)
2022 IF FY<>0 THEN 2025
2023 FA=90-180*(FX>0)
2024 RETURN 
2025 FA=180*(ATN(-FX/FY)/3.141593-(FY<0)+2*((FY>0)*(FX>0)))
2026 RETURN 
2030 FM$=STR$(C(I,1))
2032 IF C(I,1)<10 THEN 2033 ELSE 2035
2033 FM$="SAM-"&FM$
2034 GOTO 2040
2035 FM$="MIG-"&FM$
2040 RETURN 
9999 END 
</spoiler>

 

A scan of the original instruction sheet as done by AtariAge user @Remo_Williams...

B-1 Nuclear Bomber Original.pdf

 

... and an enhanced users manual I made a few years back...

B-1 BOMBER MANUAL.pdf

 

 

 

 

 

 

Link to comment
Share on other sites

  • 2 weeks later...
3 minutes ago, Asmusr said:

If you made a first try at converting it to T80XB I'm sure someone here would help with the rest.  

Too many things on my plate, so I've not personally tried.  This is my first "full day" to play in a long time, (as one can witness from my numerous posts today), so I've been vegging out on AtariAge while I clean and sort the den.  If no one takes me up on it, I'll eventually get around to it... in about 10 years when I retire.  I figured offering up a cool little collectors item might have been inducement for someone with more time on their hands to cut & paste the code while adding the required display commands.

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