Jump to content

OX.

Members
  • Content Count

    532
  • Joined

  • Last visited

Posts posted by OX.


  1. Found this TI Basic game but can't get it to run, crashes out at line 1540 - any ideas?

     

    100 CALL CLEAR
    110 CALL SCREEN(12)
    120 CALL SOUND(600,659,0)
    130 PRINT "  000   0  000 000 0   000"
    140 PRINT "  0  0 0 0  0   0  0   0    "
    150 PRINT "  000  000  0   0  0   00"
    160 PRINT "  0  0 0 0  0   0  0   0"
    170 PRINT "  000  0 0  0   0  000 000": : :
    180 FOR BASS=1 TO 7
    190 CALL SOUND(125,165,4)
    191 FOR REST=1 TO 30
    192 NEXT REST
    200 NEXT BASS
    210 PRINT "		    FOR": : : :
    220 CALL SCREEN(4)
    230 CALL SOUND(125,659,0)
    240 CALL SOUND(750,587,0)
    250 CALL SCREEN(10)
    260 PRINT "    000  0  000  000 0 0"
    270 PRINT "    0   0 0 0  0  0  0 0"
    280 PRINT "    00  000 000   0  000"
    290 PRINT "    0   0 0 0  0  0  0 0"
    300 PRINT "    000 0 0 0   0 0  0 0"
    310 CALL SOUND(125,587,0)
    320 CALL SCREEN(16)
    330 CALL SOUND(500,523,0)
    340 FOR REST=1 TO 125
    350 NEXT REST
    360 CALL SOUND(500,523,0)
    370 CALL SCREEN(6)
    380 FOR REST=1 TO 125
    390 NEXT REST
    400 CALL SCREEN(10)
    410 CALL SOUND(500,587,0)
    420 FOR REST=1 TO 125
    430 NEXT REST
    440 CALL SCREEN(12)
    450 CALL SOUND(500,554,0)
    460 FOR REST=1 TO 125
    470 NEXT REST
    480 CALL SCREEN(5)
    490 CALL SOUND(500,587,0)
    500 FOR REST=1 TO 125
    510 NEXT REST
    520 CALL SCREEN(10)
    530 CALL SOUND(500,622,2)
    540 CALL SCREEN(16)
    550 CALL SOUND(500,659,0)
    560 CALL SCREEN(5)
    570 PRINT "COPYRIGHT BY JAMES REDDING"
    580 PRINT "AND BRETT PIJAN - 1982"
    640 REM  LASAR BASE
    650 CALL CHAR(96,"1818183C7EFF3CFF")
    660 REM  YOUR LASER
    670 CALL CHAR(104,"1008100810081008")
    680 REM  INVADER SPACESHIP
    690 CALL CHAR(112,"0080C0FE1FFEC080")
    700 CALL CHAR(113,"0103077FFC7F0301")
    710 REM  INVADER LASER BEAM
    720 CALL CHAR(120,"1008100810081008")
    730 CALL CHAR(128,"FFFFFFFFFFFFFFFF")
    740 CALL CHAR(129,"01071F3F3F7F7FFF")
    750 CALL CHAR(130,"80E0FBFCFCFEFEFF")
    760 CALL CHAR(131,"FF7F7F3F3F1F0701")
    770 CALL CHAR(132,"FFFEFEFCFCF8E080")
    780 CALL CHAR(136,"FFFFFFFFFFFFFFFF")
    790 CALL CHAR(144,"3C7EFFFFFFFF7E3C")
    800 CALL COLOR(9,4,1)
    810 CALL COLOR(10,10,1)
    820 CALL COLOR(11,16,1)
    830 CALL COLOR(12,12,1)
    840 CALL COLOR(14,4,1)
    850 CALL COLOR(13,16,1)
    860 CALL COLOR(15,9,5)
    870 CALL CLEAR
    880 CALL SCREEN(11)
    890 PRINT "   EARTH IS BEING"
    900 CALL SOUND(125,165,4)
    910 PRINT "   ATTACKED BY ALIEN"
    920 CALL SOUND(125,165,4)
    930 PRINT "TENNIS SHOES WITH"
    940 CALL SOUND(125,165,4)
    950 PRINT "PLASMA PUMPKINS": :
    960 CALL SOUND(125,165,4)
    970 PRINT "   HIT 'S' KEY"
    980 CALL SOUND(125,165,4)
    990 PRINT "   TO MOVE LEFT"
    1000 CALL SOUND(125,165,4)
    1010 PRINT "   HIT 'D' KEY"
    1020 CALL SOUND(250,110,4)
    1030 PRINT "   TO MOVE RIGHT": :
    1040 CALL SOUND(250,123,4)
    1050 PRINT "   HIT SPACE BAR"
    1060 CALL SOUND(250,147,4)
    1070 PRINT "   TO FIRE YOUR LASER": :
    1080 CALL SOUND(125,165,4)
    1090 PRINT "   WARNING !!!!"
    1100 CALL SOUND(125,165,4)
    1110 PRINT "INVADER HAS DEFENSIVE"
    1120 CALL SOUND(125,165,4)
    1130 PRINT "BAD BREATH (SHIELDS)"
    1140 CALL SOUND(125,165,4)
    1150 PRINT "   CAN YOU SAVE"
    1160 CALL SOUND(125,165,4)
    1170 PRINT "   THE UNIVERSE ?": : : :
    1180 CALL SOUND(125,165,0)
    1190 CALL SOUND(250,110,0)
    1200 CALL SOUND(250,123,0)
    1210 CALL SOUND(250,147,0)
    1211 CALL SOUND(500,165,0)
    1212 FOR DELAY=1 TO 3500
    1214 NEXT DELAY
    1220 PLAYS=4
    1240 SCORE=0
    1270 CALL CLEAR
    1275 HITS=0
    1280 CALL SCREEN(5)
    1290 CA=15
    1300 I=1
    1310 J=32
    1320 REM  YOUR BASE APPEARS
    1330 CALL HCHAR(23,CA,96)
    1340 CALL HCHAR(24,1,136,32)
    1350 REM  START NEXT BASE
    1360 IF I>=7 THEN 1370 ELSE 1390
    1370 CALL HCHAR(2,I*4,32,3)
    1375 CALL HCHAR(4,J-I*4,32,3)
    1380 I=1
    1390 CALL COLOR(11,16,1)
    1400 CALL HCHAR(2,I*4,32,3)
    1410 CALL HCHAR(4,J-1*4,32,3)
    1420 I=I=(RND*7)/10
    1430 REM  BACKGROUND BEEPS
    1440 CALL SOUND(125,165,6)
    1450 C1=INT(I*4)+1
    1460 C2=INT(J-I*4)
    1470 REM  BEGIN SHIP FIRE
    1480 F=(RND*20)
    1490 REM  DRAW SHIP
    1500 CALL HCHAR(2,J-I*4,112)
    1510 CALL HCHAR(4,J-I*4,113)
    1520 IF F>10 THEN 1660
    1530 REM  SHIP LASER
    1540 CALL VCHAR(3,I*4,120,20)
    1550 CALL VCHAR(5,J-I*4,120,18)
    1560 CALL VCHAR(3,I*4,120,18)
    1570 CALL VCHAR(5,J-I*4,32,18)
    1600 CALL GCHAR(23,I*4,G)
    1610 CALL GCHAR(23,J-1*4,G2)
    1620 REM  SHIP HITS BASE
    1630 IF G=96 THEN 2380
    1640 IF G2=96 THEN 2535
    1650 IF F=0 THEN 1660
    1660 CALL KEY(0,KEY,STATUS)
    1670 IF F=1 THEN 1680 ELSE 1690
    1680 STOP
    1690 IF KEY<>83 THEN 1760
    1700 IF CA=2 THEN 1710 ELSE 1730
    1710 CA=2
    1720 GOTO 1350
    1730 CALL HCHAR(23,CA,32)
    1740 CA=CA-2
    1750 GOTO 1820
    1760 IF KEY<>68 THEN 1840
    1770 IF CA>30 THEN 1780 ELSE 1800
    1780 CA=31
    1790 GOTO 1350
    1800 CALL HCHAR(23,CA,32)
    1810 CA=CA+2
    1820 CALL HCHAR(23,CA,96)
    1830 GOTO 1350
    1840 IF KEY<>32 THEN 1350
    1850 REM  BASE LASER
    1860 CALL SOUND(150,659,2)
    1870 CALL SOUND(150,-8,3)
    1880 CALL VCHAR(3,CA,104,20)
    1890 CALL VCHAR(3,CA,32,20)
    1900 IF CA=C1 THEN 1930
    1910 IF CA=C2 THEN 2130 ELSE 1350
    1920 REM  SHIP BLOWS UP
    1930 CALL SCREEN(12)
    1940 CALL SOUND(125,659,0)
    1941 CALL HCHAR(2,I*4,144)
    1950 CALL SOUND(875,587,2)
    1960 CALL HCHAR(2,I*4,128)
    1970 CALL HCHAR(2,I*4+1,128)
    1980 CALL HCHAR(2,I*4-1,128)
    1990 CALL HCHAR(1,I*4,128)
    2000 CALL HCHAR(3,I*4,128)
    2010 CALL HCHAR(1,I*4-1,129)
    2020 CALL HCHAR(1,I*4+1,130)
    2030 CALL HCHAR(3,I*4-1,131)
    2040 CALL HCHAR(3,I*4+1,132)
    2050 CALL SOUND(900,-7,2)
    2060 CALL SCREEN(10)
    2070 CALL COLOR(11,5,1)
    2080 CALL HCHAR(4,J-I*4,32)
    2090 FOR DELAY=1 TO 75
    2100 NEXT DELAY
    2110 CALL SCREEN(5)
    2120 GOTO 2290
    2130 CALL SCREEN(12)
    2140 CALL SOUND(125,659,0)
    2141 CALL HCHAR(4,J-I*4,144)
    2150 CALL SOUND(875,587,2)
    2160 CALL HCHAR(4,J-I*4-1,128,3)
    2170 CALL HCHAR(5,J-I*4,128)
    2180 CALL HCHAR(3,J-I*4,128)
    2190 CALL HCHAR(3,J-I*4-1,129)
    2200 CALL HCHAR(3,J-I*4+1,130)
    2210 CALL HCHAR(5,J-I*4-1,131)
    2220 CALL HCHAR(5,J-I*4+1,132)
    2230 CALL SOUND(900,-7,0)
    2240 CALL SCREEN(10)
    2250 CALL HCHAR(2,I*4,32)
    2260 FOR DELAY=1 TO 75
    2270 NEXT DELAY
    2280 CALL SCREEN(5)
    2290 HITS=HITS+1
    2300 M$="HITS="&STR$(HITS)
    2310 FOR P=1 TO LEN(M$)
    2320 CODE=ASC(SEG$(M$,P,1))
    2330 CALL HCHAR(24,10+P,CODE)
    2340 NEXT P
    2350 SCORE=SCORE+100+HITS
    2360 GOTO 1300
    2370 END
    


  2. It's a pc99 disk image within the .zip file, but here's the listing if you prefer :-

     

    100 CALL CLEAR
    110 PRINT "ANT WARS"
    120 PRINT "BY NOT-POLYOPTICS"
    130 PRINT: : : : : : : : : :
    140 RANDOMIZE
    150 FOR J=0 TO 8 STEP 8
    160 CALL CHAR(36+J,"005A3C187E3C5A")
    170 CALL CHAR(37+J,"106478BA3D4C1008")
    180 CALL CHAR(38+J,"004A2C7E7E2C4A")
    190 CALL CHAR(39+J,"08104C3DBA78641")
    200 NEXT J
    210 CALL CHAR(42,"003C7E7E7E7E3C")
    220 CALL CHAR(143,"8199DB7EDB7EBD99")
    230 CALL CHAR(151,"DB85018241839A6F")
    240 MATE(1)=100
    250 MATE(2)=100
    260 A$="0123456789ABCDEF"
    270 FOR J=152 TO 159
    275 CALL SOUND(-4000,(INT(RND*3)+2)*110,0,110,0)
    280 FOR I=1 TO 16
    290 B$=B$&SEG$(A$,INT(RND*16)+1,1)
    300 NEXT I
    310 CALL CHAR(J,B$)
    320 B$=""
    330 NEXT J
    340 CALL CLEAR
    345 INPUT "S FOR SPIDER N FOR NO SPIDER":S$
    346 INPUT "1 FOR COMPUTER PLAY 0 ELSE":COMPLAY
    347 IF COMPLAY<>1 THEN 351
    348 PRINT:"COMPUTER PLAYS BLACK"
    349 FOR I=1 TO 100
    350 NEXT I
    351 CALL CLEAR
    352 CALL COLOR(1,7,1)
    360 CALL COLOR(3,7,10)
    370 CALL COLOR(4,7,10)
    380 CALL COLOR(5,7,10)
    390 CALL COLOR(6,5,6)
    400 CALL COLOR(7,5,6)
    410 CALL COLOR(8,5,6)
    420 CALL COLOR(14,2,4)
    430 CALL COLOR(15,4,16)
    440 CALL COLOR(16,13,4)
    450 FOR I=1 TO 24
    460 FOR J=1 TO 32
    470 BRD=INT(RND*9)+151
    480 IF BRD<>151 THEN 510
    490 IF INT(RND*15)=1 THEN 510
    500 GOTO 470
    510 CALL HCHAR(I,J,BRD)
    520 NEXT J
    530 NEXT I
    535 IF COMPLAY=0 THEN 540
    536 BLAX=12
    537 GOTO 545
    540 BLAX=INT(RND*13)+6
    545 CALL HCHAR(BLAX,1,42)
    550 REDX=INT(RND*13)+6
    552 CALL HCHAR(REDX,32,42)
    555 IF S$<>"S" THEN 600
    560 X=INT(RND*12)+6
    570 Y=INT(RND*16)+8
    580 CALL HCHAR(X,Y,143)
    590 SPIDER$=STR$(X+10)&STR$(Y+10)&STR$(50)
    600 DIM ANT$(45)
    610 FOR I=48 TO 90
    620 IF I=72 THEN 830
    630 IF I=73 THEN 830
    640 IF I<58 THEN 670
    650 IF I>64 THEN 670
    660 GOTO 830
    670 IF I>72 THEN 700
    680 K=24
    690 GOTO 710
    700 K=11
    710 X=INT(RND*24)+11
    720 Y=INT(RND*19)+K
    730 CALL GCHAR(X-10,Y-10,BRD)
    740 IF BRD>90 THEN 760
    750 GOTO 710
    760 SIZE=INT(RND*10)+11
    770 BRD=INT(RND*+152
    780 DIR=INT(RND*4)+36
    790 IF I<72 THEN 810
    800 DIR=DIR+8
    801 IF COMPLAY=0 THEN 810
    802 SIZE=20
    810 ANT$(I-47)=STR$(DIR)&STR$(X)&STR$(Y)&STR$(SIZE)&STR$(BRD)
    820 CALL HCHAR(X-10,Y-10,DIR)
    830 NEXT I
    840 FOR H=1 TO 10
    850 CALL SOUND(-200,262,0)
    860 CALL SOUND(-200,330,0)
    870 CALL SOUND(200,524,0)
    880 CALL SOUND(1000,110,30)
    890 FOR I=1 TO H
    900 CALL SOUND(500,524,0)
    910 CALL SOUND(1000,110,30)
    920 NEXT I
    930 CALL SOUND(4000,110,30)
    940 IF H=1 THEN 1020
    950 FOR I=1 TO INT(RND*6)
    960 X=INT(RND*24)+1
    970 Y=INT(RND*32)+1
    980 CALL GCHAR(X,Y,BRD)
    990 IF BRD<157 THEN 960
    1000 CALL HCHAR(X,Y,151)
    1010 NEXT I
    1020 FOR K=48 TO 64
    1030 FOR J=0 TO 1
    1040 I=K+(26*J)
    1050 IF J=1 THEN 1080
    1060 IF K<58 THEN 1080
    1070 I=I+7
    1080 IF ANT$(I-47)="0" THEN 1840
    1081 IF S$<>"S" THEN 1390
    1085 X=VAL(SEG$(SPIDER$,1,2))-10
    1090 Y=VAL(SEG$(SPIDER$,3,2))-10
    1100 CALL GCHAR(X,Y,BRD)
    1110 IF BRD<>143 THEN 1390
    1115 IF INT(RND*3)<>1 THEN 1235
    1120 FOR SPX=X-1 TO X+1
    1130 FOR SPY=Y-1 TO Y+1
    1140 IF SPX<1 THEN 1203
    1150 IF SPX>24 THEN 1203
    1160 IF SPY<1 THEN 1202
    1170 IF SPY>32 THEN 1202
    1180 CALL GCHAR(SPX,SPY,BRD)
    1185 IF BRD=42 THEN 1202
    1190 IF BRD>47 THEN 1202
    1200 EAT$=STR$(SPX+10)&STR$(SPY+10)
    1201 GOTO 1210
    1202 NEXT SPY
    1203 NEXT SPX
    1205 GOTO 1235
    1210 FOR SPZ=1 TO 44
    1220 IF EAT$=SEG$(ANT$(SPZ),3,4)THEN 1370
    1230 NEXT SPZ
    1235 CALL HCHAR(X,Y,INT(RND*+152)
    1255 X=X+INT(RND*3)-INT(RND*3)
    1275 Y=Y+INT(RND*3)-INT(RND*3)
    1280 IF X>0 THEN 1300
    1290 X=1
    1300 IF X<25 THEN 1320
    1310 X=24
    1320 IF Y>0 THEN 1340
    1330 Y=1
    1340 IF Y<33 THEN 1360
    1350 Y=32
    1360 CALL GCHAR(X,Y,BRD)
    1361 IF BRD=42 THEN 1255
    1362 IF BRD<47 THEN 1255
    1365 SPIDER$=STR$(X+10)&STR$(Y+10)&SEG$(SPIDER$,5,2)
    1366 CALL HCHAR(X,Y,143)
    1367 GOTO 1390
    1370 CALL HCHAR(X,Y,INT(RND*+152)
    1372 CALL HCHAR(SPX,SPY,143)
    1373 SPIDER$=STR$(SPX+10)&STR$(SPY+10)&SEG$(SPIDER$,5,2)
    1374 ANT$(SPZ)="0"
    1390 IF ANT$(I-47)="0" THEN 1840
    1400 IF I=72 THEN 1840
    1410 IF I=73 THEN 1840
    1420 IF I<58 THEN 1450
    1430 IF I>64 THEN 1450
    1440 GOTO 1840
    1450 FOR T=1 TO 5
    1460 IF ANT$(I-47)="0" THEN 1840
    1470 DIR=VAL(SEG$(ANT$(I-47),1,2))
    1480 X=VAL(SEG$(ANT$(I-47),3,2))-10
    1490 Y=VAL(SEG$(ANT$(I-47),5,2))-10
    1500 SIZE=VAL(SEG$(ANT$(I-47),7,2))-10
    1501 IF SIZE<11 THEN 1510
    1505 SIZE=10
    1510 BRD=VAL(SEG$(ANT$(I-47),9,3))
    1520 IF T>1 THEN 1770
    1530 FOR L=1 TO 8
    1540 CALL SOUND(-500,(1/SIZE)*1100,0)
    1550 IF BRD<>999 THEN 1730
    1560 CALL HCHAR(X,Y,DIR)
    1570 CALL KEY(0,KEY,STS)
    1580 CALL SOUND(-100,(1/SIZE)*1100,0)
    1590 CALL HCHAR(X,Y,42)
    1600 IF STS=0 THEN 1560
    1605 IF KEY<>32 THEN 1670
    1620 SIZE=SIZE+1
    1625 CALL HCHAR(BLAX,1,42)
    1626 CALL HCHAR(REDX,32,42)
    1630 IF SIZE<10 THEN 1650
    1640 SIZE=10
    1650 ANT$(I-47)=SEG$(ANT$(I-47),1,6)&STR$(SIZE+10)&STR$(999)
    1660 GOTO 1840
    1670 BRD=42
    1680 IF I>72 THEN 1710
    1690 MATE(1)=MATE(1)-(SIZE*2)
    1700 GOTO 1760
    1710 MATE(2)=MATE(2)-(SIZE*2)
    1720 GOTO 1760
    1730 CALL HCHAR(X,Y,BRD)
    1740 CALL HCHAR(X,Y,I)
    1750 NEXT L
    1760 CALL HCHAR(X,Y,DIR)
    1770 M=X
    1780 N=Y
    1781 IF COMPLAY=0 THEN 1790
    1783 IF I<72 THEN 1790
    1785 GOSUB 7900
    1786 GOSUB 2230
    1787 GOTO 1830
    1790 CALL KEY(0,KEY,STS)
    1800 IF STS=0 THEN 1790
    1810 IF KEY=66 THEN 1530
    1820 GOSUB 1880
    1821 CALL GCHAR(BLAX,1,LOK)
    1822 IF LOK=42 THEN 1826
    1823 MATE(2)=MATE(2)+SIZE*2
    1824 GOTO 1620
    1826 CALL GCHAR(REDX,32,LOK)
    1827 IF LOK=42 THEN 1830
    1828 MATE(1)=MATE(1)+SIZE*2
    1829 GOTO 1620
    1830 NEXT T
    1840 NEXT J
    1850 NEXT K
    1860 NEXT H
    1870 GOTO 3210
    1880 IF KEY<>69 THEN 1920
    1890 X=X-1
    1900 DIR=36
    1910 GOTO 2230
    1920 IF KEY<>83 THEN 1960
    1930 Y=Y-1
    1940 DIR=38
    1950 GOTO 2230
    1960 IF KEY<>88 THEN 2000
    1970 X=X+1
    1980 DIR=36
    1990 GOTO 2230
    2000 IF KEY<>68 THEN 2040
    2010 Y=Y+1
    2020 DIR=38
    2030 GOTO 2230
    2040 IF KEY<>87 THEN 2090
    2050 X=X-1
    2060 Y=Y-1
    2070 DIR=37
    2080 GOTO 2230
    2090 IF KEY<>82 THEN 2140
    2100 X=X-1
    2110 Y=Y+1
    2120 DIR=39
    2130 GOTO 2230
    2140 IF KEY<>90 THEN 2190
    2150 X=X+1
    2160 Y=Y-1
    2170 DIR=39
    2180 GOTO 2230
    2190 IF KEY<>67 THEN 3150
    2200 X=X+1
    2210 Y=Y+1
    2220 DIR=37
    2230 IF I<72 THEN 2250
    2240 DIR=DIR+8
    2250 CALL HCHAR(M,N,DIR)
    2260 IF X>0 THEN 2280
    2270 X=1
    2280 IF X<25 THEN 2300
    2290 X=24
    2300 IF Y>0 THEN 2320
    2310 Y=1
    2320 IF Y<33 THEN 2340
    2330 Y=32
    2340 CALL GCHAR(X,Y,GOAL)
    2341 IF GOAL<>143 THEN 2355
    2342 SPZ=VAL(SEG$(SPIDER$,5,2))-INT(RND*SIZE)
    2343 ANT$(I-47)="0"
    2344 IF INT(RND*SPZ)>SIZE THEN 2348
    2345 CALL HCHAR(X,Y,INT(RND*+152)
    2348 SPIDER$=SEG$(SPIDER$,1,4)&STR$(SPZ)
    2349 CALL HCHAR(M,N,BRD)
    2350 T=5
    2351 GOTO 3110
    2355 IF GOAL<>151 THEN 2420
    2360 FIGHT(1)=VAL(SEG$(ANT$(I-47),7,2))+2
    2370 IF FIGHT(1)<11 THEN 2390
    2380 FIGHT(1)=10
    2390 ANT$(I-47)=SEG$(ANT$(I-47),1,2)&STR$(X+10)&STR$(Y+10)&STR$(FIGHT(1)+10)&STR$(INT(RND*+152)
    2400 T=5
    2410 GOTO 3130
    2420 IF GOAL>151 THEN 3120
    2430 IF GOAL<>42 THEN 2690
    2431 IF COMPLAY=0 THEN 2440
    2432 IF Y>5 THEN 2440
    2433 IF I<72 THEN 2440
    2434 GOTO 3110
    2440 IF I<72 THEN 2570
    2450 IF Y<5 THEN 2520
    2460 MATE(1)=MATE(1)-(SIZE*2)
    2470 ANT$(I-47)="0"
    2480 IF MATE(1)<1 THEN 3170
    2490 IF INT(RND*MATE(1))+1<(SIZE*2)THEN 3170
    2500 CALL HCHAR(M,N,BRD)
    2510 GOTO 3110
    2520 MATE(2)=MATE(2)+(SIZE*2)
    2530 T=5
    2540 CALL HCHAR(M,N,BRD)
    2550 ANT$(I-47)=STR$(DIR)&STR$(X+10)&STR$(Y+10)&STR$(SIZE+11)&STR$(999)
    2560 GOTO 3110
    2570 IF Y<5 THEN 2630
    2580 MATE(1)=MATE(1)+(SIZE*2)
    2590 ANT$(I-47)=STR$(DIR)&STR$(X+10)&STR$(Y+10)&STR$(SIZE+11)&STR$(999)
    2600 CALL HCHAR(M,N,BRD)
    2610 T=5
    2620 GOTO 3110
    2630 MATE(2)=MATE(2)-(SIZE*2)
    2640 IF MATE(2)<1 THEN 3190
    2650 IF INT(RND*MATE(2))+1<(SIZE*2)THEN 3190
    2660 CALL HCHAR(M,N,BRD)
    2670 ANT$(I-47)="0"
    2680 GOTO 3110
    2690 IF I>72 THEN 2720
    2700 ANT(1)=0
    2710 GOTO 2730
    2720 ANT(1)=1
    2730 IF GOAL>39 THEN 2760
    2740 ANT(2)=0
    2750 GOTO 2770
    2760 ANT(2)=1
    2770 FIGHT(1)=VAL(SEG$(ANT$(I-47),7,2))-10
    2780 CHECK$=STR$(X+10)&STR$(Y+10)
    2790 FOR LEG=(ANT(2)*24)+48 TO(ANT(2)*24)+72
    2800 IF SEG$(ANT$(LEG-47),3,4)=CHECK$ THEN 2820
    2810 NEXT LEG
    2820 FIGHT(2)=VAL(SEG$(ANT$(LEG-47),7,2))-10
    2830 IF ANT(1)=ANT(2)THEN 3040
    2835 FOR LOK=1 TO 2
    2836 IF FIGHT(LOK)<10 THEN 2839
    2837 FIGHT(LOK)=10
    2839 NEXT LOK
    2840 CALL SOUND(250,(1/FIGHT(1))*1100,0)
    2850 CALL SOUND(250,(1/FIGHT(2))*1100,0)
    2860 IF FIGHT(1)>FIGHT(2)THEN 2900
    2870 FIGHT(2)=FIGHT(2)-INT(RND*(FIGHT(2)-FIGHT(1)))-INT(RND*2)
    2875 IF FIGHT(1)>FIGHT(2)THEN 2920
    2880 FIGHT(1)=FIGHT(1)-INT(RND*(FIGHT(2)-FIGHT(1)))
    2890 GOTO 2920
    2900 FIGHT(1)=FIGHT(1)-INT(RND*(FIGHT(1)-FIGHT(2)))
    2910 FIGHT(2)=FIGHT(2)-(FIGHT(1)-FIGHT(2))-INT(RND*2)
    2920 IF FIGHT(1)>0 THEN 2960
    2930 ANT$(I-47)="0"
    2940 CALL HCHAR(M,N,BRD)
    2950 CALL SOUND(200,-6,4,110,0)
    2960 IF FIGHT(2)>0 THEN 2990
    2970 CALL HCHAR(X,Y,VAL(SEG$(ANT$(LEG-47),9,3)))
    2980 ANT$(LEG-47)="0"
    2990 IF FIGHT(1)<1 THEN 3040
    3000 IF FIGHT(2)<1 THEN 3040
    3010 CALL SOUND(1500,110,30)
    3020 CALL SOUND(250,(1/FIGHT(1))*1100,0)
    3030 CALL SOUND(250,(1/FIGHT(2))*1100,0)
    3040 X=M
    3050 Y=N
    3060 IF ANT$(I-47)="0" THEN 3080
    3070 ANT$(I-47)=STR$(DIR)&SEG$(ANT$(I-47),3,4)&STR$(FIGHT(1)+10)&STR$(BRD)
    3080 IF ANT$(LEG-47)="0" THEN 3110
    3090 ANT$(LEG-47)=SEG$(ANT$(LEG-47),1,6)&STR$(FIGHT(2)+10)&SEG$(ANT$(LEG-47),9,3)
    3100 GOAL=BRD
    3110 RETURN
    3120 ANT$(I-47)=STR$(DIR)&STR$(X+10)&STR$(Y+10)&STR$(SIZE+10)&STR$(GOAL)
    3130 CALL HCHAR(M,N,BRD)
    3140 CALL HCHAR(X,Y,DIR)
    3150 CALL SOUND(1500,110,30)
    3160 RETURN
    3170 PRINT "BLACK WON!"
    3180 END
    3190 PRINT "RED WON!"
    3200 END
    3210 IF MATE(1)>MATE(2)THEN 3240
    3220 PRINT "BLACK WON!"
    3230 END
    3240 IF MATE(1)=MATE(2)THEN 3270
    3250 PRINT "RED WON!"
    3260 END
    3270 PRINT "TIE!"
    3280 END
    7900 IF Y>28 THEN 9000
    8000 FOR ALX=-1 TO 1
    8001 IF X+ALX<1 THEN 8100
    8002 IF X+ALX>24 THEN 8100
    8005 FOR ALY=-1 TO 1
    8007 IF Y+ALY<1 THEN 8090
    8009 IF Y+ALY>32 THEN 8090
    8011 CALL GCHAR(X+ALX,Y+ALY,LOK)
    8015 IF LOK>40 THEN 8090
    8020 X=X+ALX
    8030 Y=Y+ALY
    8035 DIR=DIR-8
    8040 RETURN
    8090 NEXT ALY
    8100 NEXT ALX
    9000 IF INT(I/4)<>I/4 THEN 9100
    9010 IF Y=INT(RND*2)THEN 10000
    9012 IF Y=1 THEN 9105
    9015 IF Y=INT(RND*2)+2 THEN 9105
    9020 Y=Y-1
    9030 GOTO 10000
    9100 IF Y=32 THEN 9700
    9105 Y=Y+1
    9120 GOTO 10000
    9500 IF X<BLAX THEN 9520
    9505 IF X=BLAX THEN 9900
    9510 X=X-1
    9515 GOTO 9900
    9520 X=X+1
    9525 GOTO 9900
    9700 IF X<REDX THEN 9720
    9710 X=X-1
    9715 GOTO 9900
    9720 X=X+1
    9900 DIR=38
    9910 RETURN
    10000 FOR ALX=-1 TO 1
    10020 IF X+ALX<1 THEN 10100
    10030 IF X+ALX>24 THEN 10100
    10070 CALL GCHAR(X+ALX,Y,LOK)
    10071 IF Y<5 THEN 10074
    10072 IF LOK=42 THEN 11000
    10074 IF LOK=42 THEN 10100
    10075 IF LOK=151 THEN 11000
    10077 IF LOK<40 THEN 11000
    10079 IF LOK>48 THEN 10100
    10080 ALX=INT(RND*3)-1
    10081 IF X+ALX<1 THEN 10080
    10082 IF X+ALX>24 THEN 10080
    10083 CALL GCHAR(X+ALX,Y,LOKO)
    10084 IF LOKO=42 THEN 10080
    10085 JACK=JACK+1
    10086 IF JACK=6 THEN 11000
    10087 IF LOKO<48 THEN 10080
    10088 GOTO 11000
    10100 NEXT ALX
    10105 IF Y>3 THEN 10110
    10106 IF ABS(BLAX-X)>0 THEN 10110
    10107 GOTO 9700
    10110 IF Y<8 THEN 9500
    10120 GOTO 9700
    11000 X=X+ALX
    11001 JACK=0
    11002 DIR=DIR-8
    11005 RETURN
    


  3. Atlantis is inaccessible right now (both the city and the game), but I will be getting to it when I have finished setting my computer room back up, and have all the rest of my TI goodies unboxed and sorted.

     

    Thank Keith, I'll keep my fingers crossed it's not too long to wait and look forward to playing it.


  4. Excellent, nice one Keith! Already have the manual scan here thanks, seeing as your here I've been trying to get hold of a copy of "Atlantis" by Intrigue, as your original post of yonks ago whetted the appetite - did you manage a disk conversion? If not any chance of a d/l of .wav of the cassette so I can play it in MESS?


  5. The header says it's a c99 source code, by the author of c99 no less, so I'd have to assume yes. If not, it's not hard to put together a quick memory allocator. ;) It never frees the memory it allocates so they could just as easily be statically defined.

     

    So we can has Core Wars 4A ;-)


  6. Just offhand, what makes it Geneve specific? I'm not seeing anything with a quick scan of the source...? I went so far as to try a quick port to Windows.. seems to be all console I/O except for a single call sound, which the 4A could do. :)

     

    That said, the header isn't included so I don't know how big the program can be, or how to actually play it... :)

     

    hmm, possible TI99/4A conversion here?


  7. Found this C source code without any compiled version to run, does anyone know if it's for TI99/4A or Geneve?

     

    /* COREW_C  The game of Core War, as described by A.K. Dewdney in
    **		  the May 1984 issue of Scientific American (pp 14-24)
    **
    **  Copyright (c) 1984 Kevin A. Bjorke
    **  Released to the Public Domain for Non-Commercial Use Only
    **
    **  c99 conversion by Clint Pulley - last edit 990418 1820
    */
    /* Opcode format :
    **
    ** Since the Redcode Instruction set has only 9 instruction and 3 addressing
    ** modes, the code is split into three fields:
    **
    **  Bit:  7 6 5 4 3 2 1 0
    **	    a a b b i i i i
    **
    ** where a = mode of argument a
    **	   b = mode of argument b
    **	   i = instruction (0-8 -- 9-15 treated as 0, or invalid)
    **
    ** modes:  0 = immediate    1 = direct    2 = indirect
    */
    #include "hds1.c99.h.STDIO_H"
    #include "hds1.c99.h.CTYPE_H"
    #include "hds1.c99.h.STRING_H"
    #include "hds1.c99.h.STDLIB_H"
    #include "corew_h"
    /*
    ** Global Variables **
    */
    char *proga,*progb;  /* names of the battle programs */
    char *line;	 /* input buffer */
    int pc[2];	  /* Redcode program counters */
    int toss,b1,b2; /* Variables for random starting loc */
    int bot,top;    /* Start/end location counters */
    int instr;	  /* Current instruction */
    int modea,modeb;/* Current addressing modes -- see below */
    int now;	    /* programs 0 and 1 (pc index) */
    int a,b,res;    /* working storage for Redcode instructions */
    int show;	   /* used to differentiate between showing and executing code */
    int fulist;	 /* flag for full list option */
    int *code;	  /* Redcode Instructions */
    int *arga;	  /* Battle Prog Arguments */
    int *argb;	  /* Total: 6 bytes per "location" */
    FILE fp;
    /*
    ** Main Program **
    */
    main()
    { proga=malloc(41);
     progb=malloc(41);
     line=malloc(20);
     code=malloc(2*MAXSIZE);
     arga=malloc(2*MAXSIZE);
     argb=malloc(2*MAXSIZE);
     randomize();
     while (TRUE) {
       logo();
       clean();
       prepare();
       fight();
       puts("\nList Memory? ");
       if (toupper(getchar()) == 'Y') showmem(0,MAXSIZE);
       puts("\n\nPlay Again (Y/N) ? ");
       if (toupper(getchar()) != 'Y') break;
     }
     puts("\n\n\tThththththat\'s all, folks....\n");
    }
    /* Advertise the program and get game options
    */
    logo()
    { puts("\f\n\n\t\t****************************************\n");
     puts("\t\t**								    **\n");
     puts("\t\t**		  C O R E    W A R		  **\n");
     puts("\t\t**								    **\n");
     puts("\t\t****************************************\n\n\n");
     printf("\t\t   Core memory size = %4d locations\n\n",MAXSIZE);
     printf("\t\tMARS Version %s   Kevin Bjorke 5/28/84\n\n",VERSION);
     printf("\t\tc99 conversion by Clint Pulley  %s\n\n",REVDATE);
     puts( "\t\t\tFull listings? (y/n) ");
     fulist=0;
     if(toupper(getchar())=='Y')fulist=1;
     puts("\n\n");
    }
    /* Input Routines **
    */
    /* Read in both programs
    */
    prepare()
    { char *p;
     puts("\n\tEnter the name of Battle-Program A: ");
     gets(proga);
     puts("\n\tEnter the name of Battle-Program B: ");
     gets(progb);
     for (p = progb; *p; ++p)
       *p = toupper(*p);
     for (p = proga; *p; ++p)
       *p = toupper(*p);
     toss=rnd(2);
     b=MAXSIZE/5;
     b1 = rnd(b);
     b2 =(MAXSIZE / 2)+rnd(b);
     if(toss) bot=b1;
     else bot=b2;
     if ((fp = fopen(proga,"r")) == NULL) {
       printf("\f\n\nPlease enter code for %s:\n\n",proga);
       top = getprog(proga,bot);
     } else top = fgetprog(fp,bot);
     printf("\nNow listing Program %s:\n",proga);
     showmem(bot,top);
     pc[0] = bot;
     getpc(0);
     if(toss) bot=b2;
     else bot=b1;
     if ((fp = fopen(progb,"r")) == NULL) {
       printf("\f\n\nPlease enter code for %s:\n\n",progb);
       top = getprog(progb,bot);
     } else top = fgetprog(fp,bot);
     printf("\nNow listing Program %s:\n",progb);
     showmem(bot,top);
     pc[1] = bot;
     getpc(1);
    }
    /* get a program from the keyboard
    */
    getprog(prg,ct) char *prg; int ct;
    { int i,row; char *pt;
     row = 10;
     puts("Enter program one line at a time.\n");
     puts("Pressing RETURN between arguments.\n");
     puts("	 Use END to finish\n\n");
     header(9);
     while (TRUE) {
       modea = modeb = DIRECT;
       locate(row,1);
       stout(ct);
       locate(row,10);
       gets(line);
       for (i = 0; line[i]; ++i) {
      if ((line[i] == '\t') || (line[i] == ' ')) line[i] = '\0';
      line[i] = toupper(line[i]);
       }
       if ((i = getinst(ct)) == NULL) break;
       if (i == ERROR) {
      locate(row,10);
      puts("\007???\n");
      continue;
       }
       locate(row,50);
       puts(line);
       if (code[ct] != 0) {
      locate(row,20);
      gets(line);
      pt = line;
      locate(row,60);
      if (*pt == '@') {
        puts("Indirect");
        modea = INDEXED;
        ++pt;
      } else if (*pt == '#') {
        puts("Immediate");
        modea = IMMEDIATE;
        ++pt;
      }  else puts("Direct");
      i = atoi(pt);
      arga[ct] = i;
       }
       if (code[ct] != 4) {
      locate(row,30);
      gets(line);
      pt = line;
      locate(row,70);
      if (*pt == '@') {
        puts("Indirect");
        modeb = INDEXED;
        ++pt;
      } else if (*pt == '#') {
        puts("Immediate");
        modeb = IMMEDIATE;
        ++pt;
      } else puts("Direct");
      i = atoi(pt);
      argb[ct] = i;
       }
       modea = modea*64;
       modeb = modeb*16;
       code[ct] = code[ct]+(modea&192)+(modeb&48);
       ++ct;
       if ((++row) > 23) {
      row = 2;
      puts("\f");
      header(1);
       }
     }
     printf("\n\tCode for %s completed.\n",prg);
     return(ct);
    }
    /* get a program from a file
    */
    fgetprog(prg,ct) int prg,ct;
    { int i; char *pt;
     puts("\nNow reading program file...\n\n");
     while (TRUE) {
       modea = modeb = DIRECT;
       if (nextword(prg) == FALSE) break;
       if ((i = getinst(ct)) == NULL) break;
       if (i == ERROR) {
      puts("\007\nError - file fouled up!!!\n");
      exit(7);
       }
       if (code[ct] != 0) {
      nextword(prg);
      arga[ct] = rdarg(&modea);
       }
       if (code[ct] != 4) {
      nextword(prg);
      argb[ct] = rdarg(&modeb);
       }
       modea = modea*64;
       modeb = modeb*16;
       code[ct] = code[ct]+(modea&192)+(modeb&48);
       ++ct;
     }
     fclose(prg);
     return(ct);
    }
    /* select an instruction from the value in line[]
    */
    getinst(indx) int indx;
    { if (strcmp(line,"MOV") == NULL) code[indx] = 1;
     else if (strcmp(line,"ADD") == NULL) code[indx] = 2;
     else if (strcmp(line,"SUB") == NULL) code[indx] = 3;
     else if (strcmp(line,"JMP") == NULL) code[indx] = 4;
     else if (strcmp(line,"JMZ") == NULL) code[indx] = 5;
     else if (strcmp(line,"JMG") == NULL) code[indx] = 6;
     else if (strcmp(line,"DJZ") == NULL) code[indx] = 7;
     else if (strcmp(line,"CMP") == NULL) code[indx] = 8;
     else if (strcmp(line,"DAT") == NULL) code[indx] = 0;
     else if (strcmp(line,"END") == NULL) return(NULL);
     else return(ERROR);
     return(TRUE);
    }
    /* get an argument value from line[]
    */
    rdarg(md) int *md;
    { char *pt; int i;
     pt = line;
     if (*pt == '@') {
       *md = INDEXED;
       ++pt;
     } else if (*pt == '#') {
       *md = IMMEDIATE;
       ++pt;
     }
     i = atoi(pt);
     return(i);
    }
    /* set the program counters to their initial locations
    */
    getpc(i) int i;
    { puts("\nStart execution at location: ");
     gets(line);
     pc[i] = reladr(atoi(line),0);
    }
    /* print programming header on screen
    */
    header(rw) int rw;
    { locate(rw,1);
     puts("Addr");
     locate(rw,10);
     puts("Instr");
     locate(rw,20);
     putchar('A');
     locate(rw,30);
     putchar('B');
     locate(rw,55);
     puts("Modes:");
    }
    /* Get the next word from a TEXTfile, making sure to capitalize
    */
    nextword(fil) int fil;
    { char *pt; int c;
     pt = line;
     c = '\t';
     while (isspace(c)) if ((c = toupper(getc(fil))) == EOF) return (FALSE);
     while (!isspace(c)) {
       *pt++ = c;
       if ((c = toupper(getc(fil))) == EOF) return (FALSE);
     }
     *pt++ = '\0';
     return(TRUE);
    }
    /* Show memory
    */
    showmem(start,finish) int start, finish;
    { int ct;
     printf("\n\nAddresses %4d through %4d.\n",start,(finish-1));
     puts("\nPress ^E to Abort, any other key to pause\n\n");
     show = TRUE;
     for (ct = start; ct < finish; ++ct) {
       readloc(ct);
       putchar('\n');
       if (keypaus() == ENQ) break;
     }
    }
    /* MASTER BATTLE ROUTINES **
    */
    /* Fight it out
    */
    fight()
    { int ct, i; char *w;
     show = FALSE;
     w=NULL;
     puts("\n\tPRESS ANY KEY TO BEGIN ");
     while(poll(0)); while(!poll(0));
     puts("\f\t\t\tBeginning Battle!!!\n\n");
     puts("\tPress ^E to Abort, any other key to pause\n\n");
     printf("\tLeft side is  %s\n\tRight side is %s\n\n\n",proga,progb);
     for (ct = 0; ct < CUTOFF; ++ct) {
       if ((ct % 5) == 0) putchar('\n');
       stout(ct);
       now = 0;
       if (readloc(pc[0]) == NULL) {
      w=progb;
      break;
       }
       puts("  ");
       now = 1;
       if (readloc(pc[1]) == NULL) {
      w=proga;
      break;
       }
       putchar('\n');
       if (keypaus() == ENQ) break;
       for (i = 0; i <2; ++i)
      pc[i] = reladr(pc[i],0);
     }
     sound(30,220,0,440,1,880,3);
     printf("\n\nBattle Completed after %d instruction cycles!\n\n",ct);
     if (ct == CUTOFF || !w) puts("The outcome is a DRAW\n");
     else printf("The winning program is %s\n",w);
    }
    /* read a location, print the mnemonic, and perform it
    */
    readloc(loc) int loc;
    { instr = modea = modeb = code[loc];
     instr = instr&15;
     modea = (modea / 64) & 3;
     modeb = (modeb / 16) & 3;
     res = -1;
     switch(instr) {
    case 1 : mov(); break;
    case 2 : add(); break;
    case 3 : sub(); break;
    case 4 : jmp(); break;
    case 5 : jmz(); break;
    case 6 : jmg(); break;
    case 7 : djz(); break;
    case 8 : cmp(); break;
    default: puts("DAT");
     if(fulist && !show) puts("		    ");
     res = NULL;
     }
     printf(" %c%4d %c%4d [%4d]",mnem(modea),
       arga[loc],mnem(modeb),argb[loc],loc);
     return(res);
    }
    /* functions to perform Redcode operations **
    */
    /* Redcode MOV instruction
    */
    mov()
    { puts("MOV");
     if (show) return(NULL);
     b = findadr(pc[now], argb, modeb);
     if (modea == IMMEDIATE) {
       code[b] = 0;	  /* make it a DAT */
       argb[b] = arga[pc[now]];
       if(fulist) printf("|#%4d>%4d|",arga[pc[now]],b);
     } else {
       a = findadr(pc[now], arga, modea);
       if(fulist) printf("| %4d>%4d|",a,b);
       code[b] = code[a];
       arga[b] = arga[a];
       argb[b] = argb[a];
     }
     ++pc[now];
    }
    /* Redcode ADD instruction
    */
    add()
    { puts("ADD");
     if (show) return(NULL);
     b = findadr(pc[now], argb, modeb);
     if (modea == IMMEDIATE) {
       argb[b] = argb[b]+arga[pc[now]];
       if(fulist) printf("|#%4d+%4d|",arga[pc[now]],b);
     } else {
       a = findadr(pc[now], arga, modea);
       if(fulist) printf("| %4d+%4d|",b,a);
       argb[b] = argb[b]+arga[a];
     }
     ++pc[now];
    }
    /* Redcode SUB instruction
    */
    sub()
    { puts("SUB");
     if (show) return(NULL);
     b = findadr(pc[now], argb, modeb);
     if (modea == IMMEDIATE) {
       argb[b] = argb[b]-arga[pc[now]];
       if(fulist) printf("|%4d-#%4d|",b,arga[pc[now]]);
     } else {
       a = findadr(pc[now], arga,modea);
       if(fulist) printf("|%4d- %4d|",b,a);
       argb[b] = argb[b]-arga[a];
     }
     ++pc[now];
    }
    /* Redcode JMP Instruction
    */
    jmp()
    { puts("JMP");
     if (show) return(NULL);
     pc[now] = findadr(pc[now], arga, modea);
     if(fulist) printf("| %4d	 |",pc[now]);
    }
    /* Redcode JMZ instruction
    */
    jmz()
    { puts("JMZ");
     if (show) return(NULL);
     b = findadr(pc[now], argb, modeb);
     if(fulist) printf("| %4d	 |",b);
     if (argb[b] == 0) pc[now] = findadr(pc[now], arga, modea);
     else ++pc[now];
    }
    /* Redcode JMG Instruction
    */
    jmg()
    { puts("JMG");
     if (show) return(NULL);
     b = findadr(pc[now], argb, modeb);
     if(fulist) printf("| %4d	 |",b);
     if (argb[b] > 0) pc[now] = findadr(pc[now], arga, modea);
     else ++pc[now];
    }
    /* Redcode DJZ Instruction
    */
    djz()
    { puts("DJZ");
     if (show) return(NULL);
     b = findadr(pc[now], argb, modeb);
     if(fulist) printf("| %4d	 |",b);
     if ((--argb[b]) == NULL) pc[now] = findadr(pc[now], arga, modea);
     else ++pc[now];
    }
    /* Redcode CMP Instruction
    */
    cmp()
    { puts("CMP");
     if (show) return(NULL);
     if (modea != IMMEDIATE) {
       a = findadr(pc[now], arga, modea);
       a = argb[a];
     } else a = arga[pc[now]];
     if (modeb != IMMEDIATE) {
       b = findadr(pc[now], argb, modeb);
       b = argb[b];
     } else b = argb[pc[now]];
     ++pc[now];
     if(fulist) printf("|%4d==%4d|",a,b);
     if (a != b) ++pc[now];
    }
    /* Addressing Routines **
    */
    /* find an address via direct or indirect
    */
    findadr(orig,pab,mod) int orig, *pab, mod;
    { int p;
     if (mod == IMMEDIATE) return(orig);
     p = reladr(orig,pab[orig]);
     if (mod == INDEXED) p = reladr(p,argb[p]);
     return(p);
    }
    /* return an absolute address in the circular arena from a relative one
    */
    reladr(abs,rel) int abs,rel;
    { int j;
     if ((j = abs + rel) >= MAXSIZE) j = reladr((j - MAXSIZE),0);
     else if (j < 0) j = reladr((j + MAXSIZE),0);
     return(j);
    }
    /* Miscellaneous routines **
    */
    /* Start with a "clean slate" in the battle-code arena
    */
    clean()
    { int i;
     for (i = 0; i < MAXSIZE; ++i) {
       code[i] = '\0';
       arga[i] = NULL;
       argb[i] = NULL;
     }
    }
    /* return appropriate character for addressing modes
    */
    mnem(c) int c;
    { c = c&255;
     if (c == IMMEDIATE) return('#');
     else if (c == INDEXED) return('@');
     else return('.');
    }
    /* print a string to stderr from an integer <= 9999
    */
    stout(i) int i;
    { printf("%4d:",i);
    }
    /* pause if key pressed - return key value
    */
    keypaus()
    { int c;
     c=poll(0);
     while(poll(0));
     return(c);
    }
    


  8. The attached disk image contains the game "Hordes" which has proved a bit of a bugger to find, however the listing appears to be bugged, can any TI basic coders out there help to put this right?

     

    OX.

     

    A look at the data file shows a bunch of 16 digit strings (character definitions ?) separated by periods. In the middle of this is oddly a 2 digit string of 'FF'.

    At first glance the problem appears to lie there.

     

    Yes I agree they seem to be character definitions as when I run the game without the file import code I get no game graphics which I think is what the data file is.


  9. As far as I know these are the only two files associated with the game, the original on cassette being a case of loading the first file on side A then flipping the cassette to load the data file, so this disk version is probably a hack version of the cassette.


  10. I think it originally came from a cassette re this article - http://www.retrogamingtimes.com/rtm69/ (scroll down to the article by Keith Bergman), iv'e tried finding it for quite a while and up until now this is the only copy I can find in existence apart from the one in the article by Keith Bergman (InfernalKeith on here) has along with Atlantis. The datafile could be bad or maybe it's been saved to disk after it's been loaded from cassette and the redefined output has been saved instead of the original file, if this is the case I wonder if the redefinition bit can be skipped and just load the file as is or reverse engineer the definition code to produce the original data file.

×
×
  • Create New...