Jump to content
oddemann

HELP - I AM STUCK! - TI EXtended BASIC

Recommended Posts

4 hours ago, GDMike said:

Not an xb issue, but programming in general.

 I just spent 3 hours trying to figure out why my simple routine  in assembly was putting data from the previous Register line into my current register and I found out I had Rem'd out my new register on accident with * LI R1,LIB4 and this created a headache because I didn't notice it and the previous line said, LI R1,LIB3

So I kept getting my old data showing up..

Stupid eyeballs!!!

Sometimes one can't see the forest for the trees - or can't see the tree for the forest.

The problem you're describing is relatively simple. It's not a logical problem on a scale, where you have to setup different circumstances to analyze. From my viewpoint, all you had to do was, slowly single-step through the code in a debugger (I use Classic99) - and to your surprise you'll see that the LI R1,LIB4 doesn't execute, but rather the next instruction in your program executes. That should quickly lead to the Aha! moment. Of course set a breakpoint just before the mysterious code.

The disadvantage compared with modern programming is, that you have to have the source code side-by-side (with the debugger). Nobody said it was going to be easy.

  • Like 1

Share this post


Link to post
Share on other sites
9 minutes ago, GDMike said:

Yes, but I can't stand using the PC or laptop. 

So I suffer

Ok, have it your way. There's debuggers for the TI (as I understand Millers Graphics has one) - never used them so I can't help you.

 

  • Thanks 1

Share this post


Link to post
Share on other sites
34 minutes ago, GDMike said:

Yes, but I can't stand using the PC or laptop. 

So I suffer

 

Trying to find and solve a bug in assembly language is a mission impossible without a proper debugger I would say.

If you insist on debugging on the TI-99/4a itself, then the best debugger to use is Miller Graphics Explorer. 

It’s basically an TI-99/4a emulator running on the TI-99/4a itself. It allows you to single-step trough your assembly code and watch registers and memory, including VDP registers & memory as it happens. Very cool!

 

Look for it in the development forum here, there is even an updated version of last year.

  • Like 3

Share this post


Link to post
Share on other sites

Here’s the thread. There is a cartridge image and an updated version for loading from disk (check all posts in thread):

 

 

  • Like 3

Share this post


Link to post
Share on other sites

Well, a timely thread, as stuck I am, at the moment. 

 

What I'm interested in doing, is using the routines from the Text-to-Speech disk (SPEAK and XLAT, but really just SPEAK for present purposes) under XB256. 

 

Now, they work fine via standard XB, via the straightforward setup:

CALL INIT :: CALL LOAD("DSKl.SETUP","DSKl.XLAT","DSKl.SPEAK")

And if going in to standard XB via the XB256 menu, that'll still work as long as I don't CALL INIT.

 

But in XB256, I get "* MEMORY FULL" when attempting to load any of these (on all of MAME, Classic99 and real iron). 

 

Is it possible, do you think, for these two packages to be made to coexist? 

 

Or is this truly just a case of two sets of libraries that want too much low memory to themselves. 

Share this post


Link to post
Share on other sites

While I don't think I can answer your question, I did a lot of work (that I need to go finish) with reversing the XB text to speech code. It pretty much fills the low 8K RAM, and I believe that XB256 /also/ loads assembly there. (It actually loads 4496 bytes into low memory -- then loads another 12k into high memory for the database).

 

  • Like 2
  • Thanks 1

Share this post


Link to post
Share on other sites
9 hours ago, retroclouds said:

Here’s the thread. There is a cartridge image and an updated version for loading from disk (check all posts in thread):

 

 

If you want to use the MG Explorer on old iron to help troubleshoot XB code let me know.  I will post a version that loads into the lower part of upper memory specifically for use with XB.  Also, I would selfishly recommend the Paisley version of the MG Explorer.  It is a slightly smaller code version that fits into two ROM banks with a loader; adds help screens and a few other additions for GRAM devices and memory mapped devices.  One way you can use it is to load it into memory then set a breakpoint in your code to branch to >A000 or, launch it and then point to your code in memory to start step-by-step execution.

  • Like 4

Share this post


Link to post
Share on other sites
Posted (edited)
6 hours ago, Tursi said:

While I don't think I can answer your question, I did a lot of work (that I need to go finish) with reversing the XB text to speech code. It pretty much fills the low 8K RAM, and I believe that XB256 /also/ loads assembly there. (It actually loads 4496 bytes into low memory -- then loads another 12k into high memory for the database).

 

Thanks.  Alas, that probably addresses that then.  If the text-to-speech disk pretty much fills the low 8K.  Too bad.  If it were possible, they'd be a killer solution for timed and tone and slope adjusted speech with music (i.e., the TI-99 "singing" in time and in tune) since XB256 provides a solution for loop timing and creation and use of of compressed/assembled sound lists independent/simultaneous with execution of XB code, and the text-to-speech disk provides a solution for playing allophone speech from XB. 

 

So at present, I can get speech from within an XB program that is simultaneously playing music (using XB256), and which even handles timing of loops involving speech events

 

And I can get tone and slope adjusted speech from within XB (using the Text-to-Speech disk). 

 

But the dream would be to do both those things at once. 

 

Perhaps my quest continues.  To make my TI-99/4A (LPC) sing to its own (PSG) music from within XB. 

 

But that would have been a sweet combo to make it happen. 

Edited by pixelpedant

Share this post


Link to post
Share on other sites
Posted (edited)

Well, considering this problem at length, I concluded that while I had not initially found myself solution there, Harry Wilhelm was still probably the solution to all the problems in the XB universe (or at least those not addressed by RXB). 

 

So I dug through the TML 2.0 documentation and used HMLOADER, provided and documented there, to embed and run the text-to-speech routines from high memory, with XB256 loaded in low memory. 

 

This worked, and constitutes a solution, it would seem, to the desire to use the text-to-speech routines (well, I don't actually care about text-to-speech per se - really just allophone to LPC translation) in XB256, with its timing and sound features.

 

Edited by pixelpedant
  • Like 2

Share this post


Link to post
Share on other sites
Posted (edited)

Using explorer in assembly to troubleshoot is definitely a good thing, as if I really had trouble I'd go to it. But this year building my program, I've usually worked out my issues, and I'll tell ya, 99.5 percent have always been, for me, my own stupid fault, misspelled words, using CI instead of C, marking * in the beginning of my useful code instead of just below it or above my code. Just stupid stuff. Its not happening a lot, but I have found this as my #1 issue.

 

Edited by GDMike

Share this post


Link to post
Share on other sites
5 hours ago, GDMike said:

Using explorer in assembly to troubleshoot is definitely a good thing, as if I really had trouble I'd go to it. But this year building my program, I've usually worked out my issues, and I'll tell ya, 99.5 percent have always been, for me, my own stupid fault, misspelled words, using CI instead of C, marking * in the beginning of my useful code instead of just below it or above my code. Just stupid stuff. Its not happening a lot, but I have found this as my #1 issue.

You learn from your mistakes. But using 3 hours to find you Rem'd the line ... :skull:

 

  • Like 1

Share this post


Link to post
Share on other sites

Two days... Two days! Yikes!

 

I implemented a Bresenham algorithm as part of a (starting) library of bitmap subroutines in Assembler. That d**n thing drove me crazy. Either it drew 2 pixels and stopped or drew one pixel to the left where it should head right and all other sorts of effect, including overwriting part of the color table.

 

It was a relatively simple C program (Wikipedia, last example) to be converted, really. And I read it row by row comparing with my Assembler translation, over and over. I didn't see any error. Then suddenly yesterday evening...

 

JLE is not "jump less / equal"!!! And... Exactly this is stated in the E/A manual, too, as an extra hint! *facepalm*

 

Using JLT and JEQ in 2 consecutive lines did the job.

 

Michael

 

  • Thanks 1

Share this post


Link to post
Share on other sites

Yes because I kept ignoring to read anything with * and my label that was Rem'd out looked like this

*LIB3

Lib3 MOV ...

*LIB4 MOV

           LI R0,960

And because this was a BL routine that was being called by another routine in another file, I kept thinking the data in the calling routine was correct and so I kept troubleshooting the calling program down deeper because I couldn't see the actual data.

Now with that said, I'm also on real HW and if I were in classic99 with a debugger open I could have seen the data. But this program hasn't needed extensive debugging of code because it's so straightforward and not really complicated, but not knowing what the data was forced me to create a simple routine in my calling program that shows the data from the sub IF I unrem those* to allow it to run when needed. 

Oh, I'll know if it's unrem'd btw.

But yes, I gotta hold on it again..

I learned a lesson

 

 

 

  • Like 2

Share this post


Link to post
Share on other sites
Posted (edited)

ld cassettes... SO COOOOOL!!!

I have a lot of old cassettes and today I tried out Audacity, saved the file as a WAV mone file (important that I learned, the mono part :p )

AND guess what... Yesterday song and animation was loaded to C99, SOOO COOOL! I guess the tapes are like 30-35 years old. Got 8 "originals" and 12 cassettes with multi-files on them (got some 90 min. tapes with files one them). Need to sort all this out and see what I got.

OK... That is great... BUT I don't want to use 2 1/2 min. every time I want to listen to this or play around with the program. How can I save it so I get it in faster? How can I copy the program it self to word. So that I can play around with it?

- So fast save for faster load!
- Copy "lines" for word!

PS! No sound on this... :(

Edited by oddemann

Share this post


Link to post
Share on other sites

Classic99 can read your WAV files in overdrive mode, too, which should load the data a little faster. It won't sound right, it'll cut off and may jump around, but the computer is hearing it fine. I've tested that a few times. :)

 

Share this post


Link to post
Share on other sites
Posted (edited)

Cassettes and WAV files... Working working, rerecording and adjusting volume. Data cassette player and another cassette player... Some have been OK.

BUT...
 - Been working on "Lionel and the Ladders"... Gave up and found the file online - File online OK!
 - Been working on "Shuttle Attak"... Gave up and found the file online - File online NOT OK! Found different formats. WAV files that dos not work and all the rest. Started with text file... oboy oboy... a lot of "f... ups" in the program.

I think the file is to "corrupted" to easily debug it, dos anyone have that file in working condition? I am giving up on the cassette that I have! And what I found online is to bad to debug.

If someone wants to do the "jigzza puzzle"... here is the file...

90 @=1 :: \=2 :: OPTION BASE 1 :: DIM MX(8),MY(8),PT(9)
100 CALL B :: RESTORE 9000 :: FOR ][email protected] TO 2 :: READ _,]$ :: DISPLAY AT(_,15-LEN(]$)/\):]$ :: NEXT ] :: CALL CHAR(64,"3C4299A1A199423C")
105 FOR ][email protected] TO 8 :: READ MX(]),MY(]),PT(]) :: NEXT ] :: READ PT(9)
110 CALL MAGNIFY(@) :: FOR ][email protected] TO 14 :: CALL COLOR(],16,\) :: NEXT ]
115 FOR ]=1 TO 220 :: NEXT ] :: DISPLAY AT(14,12)BEEP:"SELECT": :"         1 JOYSTICK": :"         2 KEYBOARD"
120 [email protected] :: FOR ][email protected] TO 8 :: CALL KEY(3,K,S) :: IF K=49 THEN J=[ :: GOTO 200 ELSE IF K=50 THEN 200
130 CALL SPRITE(#],46,INT(RND*13+3),98,50,MY(])*5,MX(])*5,#8+],46,INT(RND*13+3),98,195,MY(])*5,MX(])*5) :: NEXT ] :: GOTO 120
200 DATA "aaaaamnopq€ƒ†…††††rstuvaaaaaaajkl…†€€ƒ††††„†…†€€€wxyaahi††††††€†…††‚ƒ††††€ƒ†††z{…†‚„†††…†††††‚€„†††…†††‚„††"
205 DATA "aaaaamnopq…†††††‚€rstuvaaaaaaajkl€€ƒ††††„†…†€€€ƒ††wxyaahi†††€†…††‚ƒ††††€ƒ††††††z{„†††…†††††‚€„†††…†††‚„††…†‚"
210 DATA "aaaaamnopq†††‚€€„‚rstuvaaaaaaajkl††††„†…†€€€ƒ†††††wxyaahi€†…††‚ƒ††††€ƒ†††††††††z{††…††††‚€„†††…†††‚„††…†‚„††"
215 DATA "aaaaamnopq‚€€„‚€ƒ†rstuvaaaaaaajkl†„†…†€€€ƒ††††††…†wxyaahi…††‚ƒ††††€ƒ††††††††††††z{††††‚€„†††…†††‚„††…†‚„††††…"
220 DATA "aaaaamnopq„‚€ƒ†††rstuvaaaaaaajkl…†€€€ƒ††††††…††††wxyaahi‚ƒ††††€ƒ†††††††††††††€z{†‚€„†††…†††‚„††…†‚„†††…††††"
225 DATA "aaaaamnopqƒ†††€€ƒrstuvaaaaaaajkl€€€ƒ††††††…††††€€wxyaahi†††€ƒ†††††††††††††€†…†z{„†††…†††‚„††…†‚„†††…†††††‚€"
230 DATA "aaaaamnopq†€€ƒ†€rstuvaaaaaaajklƒ††††††…††††€€ƒ††wxyaahi€ƒ†††††††††††††€†…††‚ƒz{†…†††‚„††…†‚„†††…†††††‚€„††"
235 DATA "aaaaamnopq€ƒ„€€€€rstuvaaaaaaajkl†††††…†††€€ƒ††††„wxyaahi†††††††††††††€†…††‚ƒ†††z{††‚„††…†‚„†††…†††††‚€„†††…†"
500 SP=4 :: SH=6 :: SC=[ :: [email protected]=3 :: K\=32 :: K[=76 :: IF J THEN 700
510 [email protected]=1 :: K[,K\=18 :: CALL HCHAR(14,@,32,192) :: DISPLAY AT(16,8)BEEP:"ALPHA LOCK  UP" :: FOR ][email protected] TO 100 :: NEXT ]
700 CALL D :: CALL MAGNIFY(3) :: CALL B :: CALL VCHAR(@,@,96,768) :: RESTORE 7000 :: FOR ]=96 TO 140 STEP 4 :: READ ]$ :: CALL CHAR(],]$)
705 NEXT ] :: CALL CHAR(92,"384482FEFE824438"&RPT$("0",48))
710 CALL CHAR(90,"080808083E080808",33,"F0F0",34,"0",35,"F0F0") :: FOR ]=7 TO 15 :: CALL HCHAR(],11,132,16) :: NEXT ] :: CALL VCHAR(\,3,32,22)
720 CALL VCHAR(\,4,32,22) :: ]$="A L T I T U D E" :: CALL VCHAR(3,4,90,20) :: FOR ][email protected] TO 15 :: CALL HCHAR(]+4,3,ASC(SEG$(]$,],@))) :: NEXT ]
730 DISPLAY AT(22,@):" Za SCORE 000000 SHUTTLES     a FUEL (((((((((((((((((()  a VERTICAL LIFT MPS 0    " :: GOSUB 6000 :: GOSUB 6010
735 CALL HCHAR(24,31,32) :: CALL CHAR(46,"0000001818",40,"000000FFFF")
740 CALL CHAR(40,"000000FFFF") :: CALL HCHAR(\,6,104,26) :: CALL HCHAR(20,6,104,26) :: CALL VCHAR(\,6,104,19) :: CALL VCHAR(\,31,104,19) :: FOR ]=3 TO 6
750 CALL HCHAR(],]+4,136) :: CALL HCHAR(],33-],137) :: CALL HCHAR(22-],]+4,138) :: CALL HCHAR(22-],33-],139) :: CALL HCHAR(],]+5,141,24-((]-\)*\))
760 CALL HCHAR(22-],]+5,141,24-((]-\)*\)) :: CALL VCHAR(][email protected],]+4,140,17-((]-\)*\)) :: CALL VCHAR(][email protected],33-],140,17-((]-\)*\)) :: NEXT ]
765 RESTORE 768 :: FOR ]=6 TO 4+SH :: READ X,Y,_ :: CALL SPRITE(#],_,5,X,Y,[,[) :: NEXT ]
768 DATA 49,97,120,49,81,120,105,117,128,89,81,128,105,99,128
770 CALL SPRITE(#@,128,\,105,81,#\,92,7,169,26,#3,32,\,64,233,#4,96,16,65,233) :: CALL COLOR(12,5,15,@,7,16,\,14,16)
780 CALL COLOR(13,3,15,3,5,16,4,5,16,5,\,16,6,\,16,7,\,16,8,\,16,9,\,\,10,7,7,11,15,15,14,10,9)
850 CALL VCHAR(22,31,32,\) :: HT=20 :: [email protected] :: U2,U,X1,Y1=[ :: FL=30 :: GOSUB 6030
890 P=8 :: CALL CHAR(36,"C0C"&RPT$("0",50)) :: B$="FFFEFCF8F0E0C08000" :: CALL HCHAR(23,12,40,19)
895 U2=-.5 :: U=.2 :: CALL KEY([email protected],K,S) :: IF K<>K[ THEN 895 :: GOSUB 6030
896 _=24 :: FOR ]=169 TO 153 STEP-1 :: CALL LOCATE(#\,],26) :: CALL SOUND(-999,111,_,-7,_) :: _=_-1.5 :: CALL W(50) :: NEXT ]
897 U2=-.5 :: CALL SOUND(99,700,15) :: CALL SOUND(99,600,15)
900 GOSUB 6120 :: IF Y>[ THEN CALL SOUND(-99,111,15,-5,15) :: GOTO 917 ELSE P=P+(X<[)-(X>[) :: IF P>8 THEN [email protected] ELSE IF P<@ THEN P=8
910 CALL PATTERN(#@,96+4*P) :: GOTO 920
917 Y1=Y1+MY(P) :: X1=X1+MX(P) :: Y1=MIN(ABS(Y1),10)*SGN(Y1) :: X1=MIN(ABS(X1),10)*SGN(X1) :: CALL MOTION(#1,-Y1,X1)
920 CALL KEY([email protected],K,S) :: IF K<>K[ THEN U2=U2+.1 :: U1=0 ELSE U2=U2-.1 :: U2=MAX(-.8,U2) :: U1=2 :: CALL SOUND(-999,111,22,-7,22)
930 GOSUB 6030 :: HT=HT+U2 :: CALL LOCATE(#\,HT*8-7,26) :: IF HT>22 OR HT<3 THEN 1000 ELSE IF HT>4 AND HT<6 THEN CALL COLOR(#\,\)ELSE CALL COLOR(#\,7)
940 CALL CHAR(41,"000000"&RPT$(SEG$(B$,KP,\),\)) :: KP=KP+\+U1 :: IF KP<18 THEN 955
950 CALL HCHAR(23,FL,32) :: [email protected] :: IF FL<12 THEN 1030 ELSE CALL CHAR(41,"000000FFFF") :: CALL HCHAR(23,FL,41) :: [email protected]
955 CALL POSITION(#@,A,B) :: IF HT>4 AND HT<6 THEN IF B>217 AND A>59 AND A<71 THEN IF B>241 THEN 1490 ELSE 900
960 X=INT(22-HT)*1.7 :: IF A>105+X OR A<41-X OR B>196+X OR B<78-X THEN 1000 ELSE 900
1000 CALL POSITION(#@,X,Y) :: CALL DELSPRITE(#@) :: FOR ]=15 TO 22 :: CALL SPRITE(#],36,\,X,Y,MY(]-14)*5,MX(]-14)*5) :: CALL SOUND(-999,111,25,-7,9)
1010 NEXT ] :: FOR [email protected] TO 150 :: NEXT D :: FOR ]=15 TO 22 :: CALL DELSPRITE(#]) :: NEXT ] :: CALL DELSPRITE(#4+SH)
1020 [email protected] :: GOSUB 6010 :: IF SH>[ THEN 770 ELSE 3100
1030 CALL M :: FOR ]=HT TO 23 STEP .5 :: CALL LOCATE(#2,]*8-7,26) :: CALL SOUND(-999,500-]*15,18,-7,]) :: NEXT ] :: GOTO 1000
1490 SC=SC+500 :: CALL D :: CALL B :: RESTORE 8000
1500 FOR ]=100 TO 132 STEP 4 :: READ ]$ :: CALL CHAR(],]$) :: NEXT ] :: CALL HCHAR(23,@,140,64) :: CALL VCHAR(@,32,140,72)
1510 FOR ][email protected] TO 22 :: CALL HCHAR(],3,96,29) :: NEXT ] :: CALL HCHAR(24,3,32,29) :: DISPLAY AT(24,@):" BURN((((((((() SCORE " :: GOSUB 6020
1530 CALL SCREEN(\) :: FOR ][email protected] TO 8 :: CALL COLOR(],7,16) :: NEXT ] :: CALL COLOR(\,14,16,3,13,16,4,13,16)
1540 CALL SCREEN(6) :: CALL COLOR(9,\,\,10,8,\,11,8,\,12,8,\,13,4,8,14,6,6) :: CALL MAGNIFY(@)
1550 RESTORE 200 :: _=3 :: FOR ]=4 TO 21 :: CALL SPRITE(#],103,6,_,RND*[email protected],[,RND*(SP-\)[email protected]) :: _=_+8 :: NEXT ]
1560 CALL SPRITE(#@,101,6,130,33,#\,100,6,INT(RND*57+4),@,[,SP)
1690 CALL HCHAR(22,31,122) :: CALL HCHAR(24,8,40,10) :: CALL HCHAR(24,17,41) :: T,X1=[ :: Y1=-\ :: FL=17 :: [email protected] :: GOTO 1860
1700 FOR [email protected] TO 6 :: GOSUB 6100 :: Y1=Y1-(Y=[) :: X1=X1+SGN(X)*\ :: Y1=Y1-SGN(Y)*\ :: Y1=MIN(ABS(Y1),12)*SGN(Y1)
1710 X1=MIN(ABS(X1),12)*SGN(X1) :: CALL MOTION(#@,Y1,X1) :: CALL POSITION(#@,X,Y,#\,X2,Y2) :: IF T THEN CALL MOTION(#3,-7,X1)
1714 IF Y<17 THEN CALL LOCATE(#@,X,235) :: Y=235 ELSE IF Y>241 THEN CALL LOCATE(#@,X,25) :: Y=25
1715 IF X<8 OR X>173 THEN CALL MOTION(#@,[,X1) :: Y1=[ :: X=4 :: CALL LOCATE(#@,8,Y+X1)
1720 IF X>141 AND X<150 AND Y>51 AND Y<191 OR X>151 AND X<161 AND Y>31 AND Y<226 OR X>160 THEN 1900
1730 CALL COINC(#@,#\,7,H) :: IF H THEN 2000 ELSE IF Y2>243 THEN 1900
1780 CALL CHAR(41,"000000"&RPT$(SEG$(B$,KP,\),\)) :: KP=KP+\+U1 :: IF KP<18 THEN 1800
1790 CALL HCHAR(24,FL,32) :: [email protected] :: IF FL<8 THEN 1930 ELSE CALL CHAR(41,"000000FFFF") :: CALL HCHAR(24,FL,41) :: [email protected]
1800 IF [email protected] THEN 1810 ELSE IF X>115 THEN 1850 ELSE IF RND<.6 THEN 1850 ELSE CALL POSITION(#@,X,Y) :: CALL SPRITE(#3,102,6,169,Y,-14,X1) :: [email protected]
1810 CALL POSITION(#3,X,Y) :: IF X<10 OR X>169 THEN CALL DELSPRITE(#3) :: T=[ :: GOTO 1850
1820 CALL COINC(#@,#3,8,H) :: CALL COINC(#3,#\,8,H1) :: IF H THEN 1900 ELSE IF H1 THEN 1950
1850 NEXT F1
1860 READ ]$ :: DISPLAY AT(19,@):]$ :: [email protected] :: IF F=8 THEN [email protected] :: RESTORE 200 :: GOTO 1700 ELSE 1700
1900 CALL POSITION(#@,X,Y) :: FOR ][email protected] TO 8 :: CALL SPRITE(#],46,]+3,X,Y,MY(])*5,MX(])*5) :: CALL SOUND(-999,111,25,-7,]*3) :: NEXT ]
1910 FOR ][email protected] TO 200 :: NEXT ] :: [email protected] :: IF SH>[ THEN 700 ELSE 3100
1930 CALL MOTION(#@,8,[) :: FOR ]=[ TO 1000 :: CALL POSITION(#1,_,X) :: IF X>140 THEN 1900
1940 NEXT ]
1950 CALL M :: CALL DELSPRITE(#\,#3) :: T=[ :: CALL SPRITE(#\,100,6,RND*98+5,17,[,\) :: GOTO 1700
2000 CALL D :: SC=SC+1000 :: CALL MAGNIFY(3) :: CALL B :: RESTORE 8500 :: FOR ]=96 TO 140 STEP 4 :: READ ]$ :: CALL CHAR(],]$&RPT$("0",64-LEN(]$))) :: NEXT ]
2020 CALL CHAR(33,"FFFFFFFFFFFFFFFF0103070F1F3F7FFFFF7F3F1F0F070301",36,"FFFEFCF8F0E0C08080C0E0F0F8FCFEFF") :: CALL VCHAR(19,27,33,277)
2030 CALL HCHAR(21,25,33,241) :: CALL HCHAR(5,25,33,16) :: CALL HCHAR(6,26,33,13) :: CALL HCHAR(7,27,33) :: CALL HCHAR(19,7,33)
2040 CALL HCHAR(19,27,33,14) :: CALL HCHAR(20,26,33,16) :: CALL HCHAR(21,25,33,3) :: FOR ][email protected] TO 4 :: CALL HCHAR(4+],11-],36)
2050 CALL HCHAR(17+],6+],37) :: CALL HCHAR(4+],23+],35) :: CALL HCHAR(17+],28-],34) :: NEXT ] :: DISPLAY AT(21,9)SIZE(13):"FUEL(((((((()"
2060 DISPLAY AT(20,8)SIZE(15):"THRUST - MPS  0" :: DISPLAY AT(5,9)SIZE(13):" RANGE"
2070 CALL CHAR(41,"000000FFFF") :: CALL SCREEN(6) :: FOR ]=[ TO 14 :: CALL COLOR(],7,\,1,6,\,3,11,\,4,11,\) :: NEXT ]
2080 CALL SPRITE(#\,96,10,121,169) :: FOR ]=3 TO 15 :: CALL SPRITE(#],132,6,RND*[email protected],RND*[email protected]) :: NEXT ]
2200 M3(3)[email protected] :: M0(4),M3(@)[email protected] :: M0(@)=\ :: M0(\)=3 :: M0(3)=4 :: M3(\),M3(4)=[ :: M7(@)=43 :: M7(\)=61 :: M7(3)=45 :: M7(4)=61
2210 RANDOMIZE :: M2=\ :: FL=23 :: R=INT(RND*400+100) :: CALL SPRITE(#@,128,6,RND*120+30,RND*170+40)
2220 D_=INT(RND*3)[email protected] :: D]=INT(RND*3)[email protected] :: C,[email protected] :: M6=[
2300 GOSUB 6100 :: FOR ]=3 TO 15 :: CALL MOTION(#],Y1/\,-X1/\) :: NEXT ] :: CALL KEY([email protected],K,S) :: IF K=K\ THEN M2=M0(M2) :: M1=M3(M2)
2310 [email protected]+([email protected]>\)*\ :: CALL COLOR(14,9+C,\) :: R=R-M6 :: R=MIN(ABS(R),999)*SGN(R) :: IF M6+M1<5 AND M6+M1>-5 THEN M6=M6+M1
2320 DISPLAY AT(5,18)SIZE(4):STR$(R) :: DISPLAY AT(20,15)SIZE(8):CHR$(M7(M2))&" MPS "&STR$(M6) :: P=8
2330 IF R<400 THEN P=7 :: IF R<200 THEN P=6 :: IF R<100 THEN P=5 :: IF R<50 THEN P=4
2340 IF R<25 THEN P=3 :: IF R<15 THEN P=\ :: IF R<4 THEN [email protected] :: IF R<[ THEN P=11
2345 IF D1<>P OR [email protected] THEN CALL SOUND(30*P,1400+25*P,P*\) :: CALL SOUND(30*P,1500+25*P,P*\) :: D1=P
2347 IF [email protected] THEN CALL COINC(#@,#\,8,H) :: IF H THEN 4000
2350 CALL PATTERN(#@,P*4+96) :: IF M2=\ OR M2=4 THEN 2370 :: CALL CHAR(41,"000000"&RPT$(SEG$(B$,KP,\),\)) :: KP=KP+\ :: IF KP<18 THEN 2370
2360 CALL HCHAR(21,FL,32) :: [email protected] :: IF FL=14 THEN 3100 :: CALL CHAR(41,"000000FFFF") :: CALL HCHAR(21,FL,41) :: [email protected]
2370 Y1=Y1+Y/\ :: X1=X1+X/\ :: Y1=MIN(ABS(Y1),4)*SGN(Y1) :: X1=MIN(ABS(X1),4)*SGN(X1) :: CALL POSITION(#1,A,B)
2375 IF Y1=0 THEN Y1=D_
2376 IF X1=0 THEN X1=D]
2380 IF A<25 AND SGN(Y1)<[ OR T2>\ AND A<30 THEN 2440 :: IF A>167 AND SGN(Y1)>[ OR A>167 AND T2>\ THEN 2450
2390 IF B>213 AND SGN(X1)<[ OR T>\ AND B>213 THEN 2420 :: IF B<34 AND SGN(X1)>[ OR B<42 AND T>\ THEN 2430
2395 IF D>[ THEN 2460
2400 T2,T=\ :: CALL MOTION(#1,Y1,-X1) :: GOTO 2300
2420 D=\ :: CALL M :: T=T-SGN(X)*\ :: CALL HCHAR(13,27,138) :: IF T<>@ THEN 2300 :: X1=ABS(X1) :: GOTO 2400
2430 [email protected] :: CALL M :: T=T+SGN(X)*\ :: CALL HCHAR(13,7,136) :: IF T<>@ THEN 2300 :: X1=-X1 :: GOTO 2300
2440 D=4 :: CALL M :: T2=T2-SGN(Y)*\ :: CALL HCHAR(6,17,137) :: IF T2<>@ THEN 2300 :: Y1=ABS(Y1) :: GOTO 2400
2450 D=3 :: CALL M :: T2=T2+SGN(Y)*\ :: CALL HCHAR(19,17,139) :: IF T2<>@ THEN 2300 :: Y1=-Y1 :: GOTO 2300
2460 D=[ :: CALL HCHAR(13,7,32) :: CALL HCHAR(13,27,32) :: CALL HCHAR(19,17,32) :: CALL HCHAR(6,17,32) :: GOTO 2400
2800 ]$="MISSION "&]$ :: CALL D :: CALL CLEAR :: CALL COLOR([,12,12,@,12,12) :: CALL SCREEN(12) :: CALL HCHAR(17,@,30,19*32)
2809 CALL VCHAR(@,28,30,24*9) :: FOR ][email protected] TO 14 :: CALL COLOR([,12,12,],16,5) :: NEXT ]
2810 DISPLAY AT(14,15-LEN(]$)/\)SIZE(LEN(]$))BEEP:]$ :: FOR ]=[ TO 300 :: NEXT ] :: RETURN
3100 ]$="FAILED" :: GOSUB 2800 :: IF SH>[ THEN 700 ELSE 100
4000 ]$="SUCCESSFUL" :: GOSUB 2800 :: SC=SC+1500 :: CALL M :: [email protected] :: IF SP>8 THEN SP=8 :: GOTO 700 ELSE 700
6000 DISPLAY AT(22,11)SIZE(6):RPT$("0",6-LEN(STR$(SC)))&STR$(SC) :: RETURN
6010 DISPLAY AT(22,27)SIZE(2):STR$(SH) :: RETURN
6020 DISPLAY AT(24,23)SIZE(6):RPT$("0",6-LEN(STR$(SC)))&STR$(SC) :: RETURN
6030 DISPLAY AT(24,23)SIZE(4):STR$(-U2); :: RETURN
6100 IF J THEN CALL KEY(3,K,S)ELSE CALL JOYST(@,X,Y) :: Y=-Y :: RETURN
6110 X=4*((K=81)-(K=80)) :: Y=4*((K=65)-(K=76)) :: RETURN
6120 IF J=[ THEN CALL JOYST(@,X,Y) :: RETURN ELSE CALL KEY(3,K,S) :: Y=-(K=65) :: X=(K=81)-(K=80) :: RETURN
7000 DATA 01071F7FFFFFFFFFFFFFFFFF7F1F0701FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,0101030306040C0F2C3D25392503020000008080C04060E068784838488080
7010 DATA 0000000000133E5FEF39352B560F110100000008B0F02030A0E0C0C0E0408,00001F0A0B17603E60170B0A1F00000000000000C0F09C8F9CF0C
7020 DATA 01110F562B3539EF5F3E130000000000008040E0C0C0E0A03020F0B008,0002034579457D4C0F0C040603030101008080443C447C64E06040C0808
7030 DATA 00010207030307050C040F0D100000008088F06AD4AC9CF7FA7CC8,00000000030F39F1390F0300000000000000F850D0E8067C06E8D050F8
7040 DATA 000000100D0F040C05070303070201000000000000C87CFAF79CACD46AF0888,8822882288228822
7050 DATA 80C0E0F0F8FCFEFF0103070F1F3F7FFFFFFEFCF8F0E0C080FF7F3F1F0F070301,FFFFFFFFFFFFFFFF00
8000 DATA 01020C0C1020000080F8FE000000000010103800000000008,00000001071F3FFF031F7FFFFFFFFFFF0000000000011FFF0000011F7FFFFFFF
8010 DATA 031FFFFFFFFFFFFF000000000000030F00000000001FFFFF0000010FFFFFFFFF,000FFFFFFFFFFFFF1FFFFFFFFFFFFFFFF8FFFFFFFFFFFFFF00F0FFFFFFFFFFFF
8020 DATA 000080F0FFFFFFFF0000000000F8FFFF000000000000C0F0C0F1FFFFFFFFFFFF,000080F8FEFFFFFF000000000080F8FFC0F8FEFFFFFFFFFF00000080E0F8FCFF
8030 DATA 0,FFFFFFFFFFFFFFFFFF7F3F1F0F0703010103070F1F3F7FFFFFFEFCF8F0E0C08,80C0E0F0F8FCFEFF0000081C2800000000
8500 DATA 01010101030109FF090103010101010000000000800020FE20008,1020570E9B513D5591111B3F6ED8B0E0070DD72AD4E8D0D0D8DCAA497F492A1C
8510 DATA 0000081D0508281E1A281D376C587000000E1AB6ECD8F0E0E0E0F8D47CA438,000000000503040C0E0C040F1C1800000000000C94F8F0E0E0E0C0F0A07
8520 DATA 0000000000010304070602070C000000000000000000B0E0C0C080E06,00000000000001030103040000000000000000000000A0C0C0804
8530 DATA 00000000000000000303040000000000000000000000008,00000000000000000102000000000000000000000000008
8540 DATA 00000000000000000100000000000000000000000000008,8,00030F3EFC3E0F03101038387C7CEEC600C0F07C3F7CF0C063773E3E1C1C0808,0
9000 DATA 8,SHUTTLE  ATTAK,24,@ INTRIGUE SOFTWARE 1985
9010 DATA 0,1,6,1,1,5,1,0,4,1,-1,7,0,-1,0,-1,-1,3,-1,0,8,-1,1,1,2
10000 SUB D :: CALL DELSPRITE(ALL) :: SUBEND :: SUB B :: CALL SCREEN(2) :: CALL CLEAR :: FOR ]=1 TO 14 :: CALL COLOR(],2,2) :: NEXT ] :: SUBEND
10010 SUB W(X) :: FOR ]=0 TO X :: NEXT ] :: SUBEND :: SUB M :: CALL MOTION(#1,0,0) :: SUBEND

 

Edited by oddemann
  • Like 1

Share this post


Link to post
Share on other sites
1 hour ago, Tursi said:

Classic99 can read your WAV files in overdrive mode, too, which should load the data a little faster. It won't sound right, it'll cut off and may jump around, but the computer is hearing it fine. I've tested that a few times. :)

 

Been playing around with the "cassette" player in C99 and it is OK! I tried the Panic on the TI-Tanic... ALMOST got it in. You have to OLD CS1 Side A then run it and the program dos OLD Side B... 5 sec before it was in... Bad data :p Have tried it one time. Will have to try the WAV files some more.

But been trying to adjust volume and looking at Audacity... What is the best volume? As high as possible or on the green side... IF you know...

I did not know about overdrive mode, will test it ;), thx for the advice!

Share this post


Link to post
Share on other sites
11 hours ago, oddemann said:

Been playing around with the "cassette" player in C99 and it is OK! I tried the Panic on the TI-Tanic... ALMOST got it in. You have to OLD CS1 Side A then run it and the program dos OLD Side B... 5 sec before it was in... Bad data 😛 Have tried it one time. Will have to try the WAV files some more.

But been trying to adjust volume and looking at Audacity... What is the best volume? As high as possible or on the green side... IF you know...

I did not know about overdrive mode, will test it ;), thx for the advice!

Classic99 tries to auto-adjust level, but I can't do much for files that don't load as I've never dug too deeply into how the cassette system works. We have had experts in the past create external tools like CS1er and I've always felt that was the better approach, but the appeal of trying to get tape read to work eventually overwhelmed me. ;)

 

In short, I don't know the answer to your question. ;) Make it as loud as you can without allowing any of the waveform to clip, and you'll have the best chance of reading it.

 

Share this post


Link to post
Share on other sites
Posted (edited)
10 CALL CLEAR
20 CALL SCREEN(11)
30 PRINT "BATTLE AT STONEHENGE"
40 PRINT "PRESS S (LEFT) OR D (RIGHT) TO MOVE."
50 PRINT "PRESS THE SPACEBAR TO FIRE."
60 PRINT "PRESS ANY KEY TO BEGIN."
70 CALL KEY(0,K,S)
80 IF K<0 THEN 70
90 REM **BATTLE AT STONEHENGE
100 CALL SCREEN(2)
110 CALL CLEAR
120 RESTORE
130 RANDOMIZE
140 REM **ASSIGN VARIABLES
150 SCORE=0
160 LL=20
170 RR=15
180 IF TA=2 THEN 630
190 REM **CHAR DESIGN
200 CALL CHAR(144,"3C995A3C18183C18")
210 CALL CHAR(40,"0")
220 CALL CHAR(104,"0")
230 CALL CHAR(154,"1898FF3D3C3CE404")
240 CALL CHAR(155,"1819FFBC3C3C2720")
250 CALL CHAR(120,"1818181818181818")
260 CALL CHAR(133,"FFFFFFFFFFFFFFFF")
270 CALL CHAR(134,"00000000FFFFFFFF")
280 CALL CHAR(135,"3C3C3C3C3C3C3C3C")
290 CALL CHAR(145,"3C18183C5A993C18")
300 REM **COLOR
310 CALL COLOR(8,8,8)
320 CALL COLOR(4,2,8)
330 CALL COLOR(15,16,13)
340 CALL COLOR(2,4,13)
350 CALL COLOR(16,2,13)
360 CALL COLOR(13,2,2)
370 CALL COLOR(12,12,13)
380 REM **PILLARS
390 CALL HCHAR(16,4,133,5)
400 CALL HCHAR(16,25,133,5)
410 READ AA
420 IF AA=0 THEN 470
430 FOR J=17 TO 20
440 CALL HCHAR(J,AA,133,1)
450 NEXT J
460 GOTO 410
470 READ BB
480 CALL HCHAR(6,6,134,5)
490 CALL HCHAR(6,23,134,5)
500 IF BB=0 THEN 550
510 FOR J=7 TO 10
520 CALL HCHAR(J,BB,135,1)
530 NEXT J
540 GOTO 470
550 CALL COLOR(10,4,10)
560 FOR JJ=1 TO 5
570 FOR II=1 TO 5
580 CALL HCHAR(JJ,II,104,28)
590 NEXT II
600 NEXT JJ
610 DATA 5,7,26,28,0
620 DATA 7,9,24,26,0
630 REM **SCORE BOARD
640 X$="SCOREZ=ZZZZZZ"
650 FOR B=1 TO LEN(X$)
660 CALL HCHAR(3,B+10,ASC(SEG$(X$,B,1)))
670 NEXT B
680 CALL SCREEN(8)
690 CALL COLOR(1,13,13)
700 CALL COLOR(13,2,13)
710 REM **INITIAL POSITIONS
720 R=INT(12*RND)+10
730 SH=INT(4*RND+6)
740 FOR CL=SH TO 20
750 IF CL=20 THEN 1220
760 CALL HCHAR(LL,RR,154)
770 CALL HCHAR(CL,R,144)
780 REM **DECISIONS
790 CALL KEY(0,K,C)
800 IF K=83 THEN 920
810 IF K=68 THEN 860
840 IF K=32 THEN 1040 ELSE 1000
850 REM **MOVEMENTS
860 CALL HCHAR(LL,RR,40)
870 RR=RR+1
880 IF RR>21 THEN 930 ELSE 990
920 CALL HCHAR(LL,RR,40)
930 RR=RR-1
940 IF RR<10 THEN 870 ELSE 990
980 GOTO 1000
990 CALL HCHAR(LL,RR,155)
1000 CALL VCHAR(CL,R,40)
1010 CALL VCHAR(CL+1,R,145)
1020 CALL SOUND(100,30*CL,21 -CL)
1030 NEXT CL
1040 REM ** POSITRON BLAST
1050 LK=LL-1
1060 FOR ML=LK TO 6 STEP -1
1070 CALL HCHAR(ML,RR,120)
1080 IF ML=CL THEN 1090 ELSE 1100
1090 IF RR=R THEN 1140
1100 CALL HCHAR(ML,RR,40)
1110 IF CL>ML THEN 1000
1120 NEXT ML
1130 GOTO 1000
1140 CALL HCHAR(ML,RR,40)
1150 CALL SOUND(100,-7,0)
1160 CALL SOUND(100,-7,5)
1170 SCORE=SCORE+CL
1180 FOR BB=1 TO LEN(STR$(SCORE))
1190 CALL HCHAR(3,BB+17,ASC(SEG$(STR$(SCORE),BB,1)))
1200 NEXT BB
1210 GOTO 720
1220 REM **TRY AGAIN
1230 TA=2
1240 X$="ANOTHER GAME?"
1250 FOR BB=1 TO LEN(X$)
1260 CALL HCHAR(24,BB+3,ASC(SEG$(X$,BB,1)))
1270 NEXT BB
1280 CALL KEY(0,K,C)
1290 IF K=89 THEN 1300 ELSE 1340
1300 CALL HCHAR(24,4,32,14)
1310 CALL HCHAR(LL,RR,32)
1320 CALL HCHAR(CL,R,32)
1330 GOTO 140
1340 IF K=78 THEN 1350 ELSE 1280
1350 END

THE MYSTERY OF STONEHENGE
Book "Time Lost"

Sorry... it is NOT a EX. B. Prog., in Basic it works fine! hehehe I leave it for you to have fun with :D
 

Edited by oddemann
  • Like 1

Share this post


Link to post
Share on other sites

PARATROOPER!

from COMPUTE! January 1985 issue 56 Vol. 7, No. 1 (wow sounds like... they have a lot of issues to keep track of :p hehehe)

Written in, bugged out most misses, I think? Well I gotten to this HUGE bug that I cant "spray" out...
"Bad value in 430"
When I press Q it stops with this "Q bug"!
There is something wrong with the "k" background... will figure out when pasted "Q bug"


 

10 REM EXTENDED BASIC REQUIRED
20 CALL CLEAR
30 FOR T=10 TO 14 :: FOR I=10 TO 14:: DISPLAY AT(12,9):"PARATROOPER"
40 CALL SCREEN(T):: NEXT I :: NEXT T
50 CALL CHAR (131,"183C7EC3183C1818"):: CALL SCREEN(12)
60 FOR T = 450 TO 550 STEP 50 :: FOR I=9 TO 19
70 DISPLAY AT(14,I) :CHR$(131)
80 CALL SOUND(10,T,3):: NEXT I :: NEXT T
85 FOR P=1 TO 100 :: NEXT P
90 GOSUB 920
100 DISPLAY AT(22,2):"NEED INSTRUCTIONS?(Y/N)"
110 ACCEPT AT(22,25)VALIDATE("YNyn") : Y$
120 IF (Y$="Y")OR(Y$="y")THEN 750
130 IF (Y$="N")OR (Y$="n")THEN 860
140 CALL CLEAR :: CALL SCREEN(8)
150 CALL CHAR(33,"E7A424E7E781A5E7",34,"E78585E5E525A5E7")
160 CALL CHAR(37,"F794141727614147",42,"503D7C7C7C7A008BD")
170 CALL CHAR(43,"183C7DC300000000",44,"08183878F808FF7E")
180 CALL CHAR(46,"187E5A183C000000",98,"01031FFFFFFFFFFF")
190 CALL CHAR(99,"80C0FCFDFDFFFFFFF")
200 CALL CHAR(117,"FFFFFFFFFFFFFFFF",122,"00E0A6E6A6FEBAEE")
210 CALL CHAR(130,"00000173FFFD0000",133,"FFFFFFFFFFFF0000")
220 CALL CHAR(134,"FCFCFCFCFCFC0000",135,"FEFEFEFEFEFE0000")
230 CALL CHAR(137,"183C7E7EFFFF1818",143,"0E5FFE7F3E1C0800")
240 CALL SCREEN(8):: CALL COLOR(9,4,8,10,6,1)
250 CALL HCHAR(16,1,107,256)
260 FOR I=1 TO 31 STEP 2 :: CALL HCHAR(16,I,98):: CALL HCHAR(16,I+1,99):: NEXT I
270 POINT=0 :: PARA=10
280 RANDOMIZE :: FOR N=22 TO 24 ::G=INT(RND*100)+10
290 CALL SPRITE(#N,143,15,G,G+120,0,.60):: NEXT N
300 S=7 :: FOR N=4 TO 6 :: S=S-1 ::RANDOMIZE
310 D=INT(RND*5)+1 :: DD=INT(RND* 14)+3 :: IF (D=OD)+(DD=ODD)+(DD=6)THEN 310
320 OD=D :: ODD=DD :: J=N*10+90+RND*10 :: CALL SPRITE(#S,44,DD,J,J,0,D):: NEXT N
330 IF FL=1 THEN 370 ELSE DISPLAY AT(15,5) :CHR$(37) :: DISPLAY AT(15,14):CHR$(34)
340 DISPLAY AT(15,23):CHR$(33)
350 CALL SPRITE(#3,32,1,180,180,0,60) :: REM INVISIBLE OCEAN SPRITE
360 CALL SPRITE(#7,133,10,121,193,#8,135,12,121,121,#9,134,14,121,49):: REM PADS
370 IF PARA=0 THEN 630 ELSE RANDOMIZE :: U=INT(RND*70)+10 :: REM PLANE ROW
380 CALL SPRITE(#1,130,2,U,10,0,-12,#2,130,16,U,7,0,-12):: REM PLANE & TROOPER
390 V=INT(RND*9)+1 :: L=INT(RND*4)+1 :: REM WEIGHT & WIND FACTORS
400 DISPLAY AT (1,1) :"TROOPS/LEFT";PARA;"--SCORE";POINT
410 DISPLAY AT(24,2):"WIND SPEED";L*2;"--WEIGHT"; (V*25)+50
420 CALL KEY(1,X,Y)
430 IF X=18 THEN CALL PATTERN(#2,13) ELSE 420
440 CALL MOTION(#2,V,L):: CALL SOUND(30,-6,5,150,5)
450 CALL COINC(#2,#7,Z,C)
460 CALL COINC(#2,#8,Z,CC)
470 CALL COINC(#2,#9,Z,CCC)
480 IF (C=-1)+(CC=-1)+(CCC=-1) THEN 510
490 CALL COINC(#2,#3,50,R):: IF R=-1 THEN 570
500 GOTO 450
510 CALL MOTION(#2,0,0):: CALL PATTERN(#2,46):: CALL SOUND(-1500,5995,4)
520 FOR T=950 TO 1500 STEP 50 :: CALL SOUND(50,T,3):: NEXT T
530 POINT=POINT-25*(C=-1)-50*(CC=-1)-75*(CCC=-1)
540 CALL DELSPRITE(#1,#2):: DISPLAY AT(13,5):"MISSION ACCOMPLISHED"
550 FOR I=1 TO 150 :: NEXT I
560 CALL HCHAR(13,5,33,22) :: GOTO 370
570 CALL MOTION(#2,0,0);: CALL SOUND(200,-4,3):: CALL PATTERN(#2,43)
580 FOR I=1 TO 200 :: NEXT I :: CALL PATTERN(#2,42)
590 CALL DELSPRITE(#1,#2):: DISPLAY AT(13,3):"YOU MISSED THE DROPZONE"
600 POINT=POINT-10 :: PARA=PARA-1
610 FOR I=1 TO 150 :: NEXT I :: CALL HCHAR(13,3,32,26)
620 GOTO 370
630 CALL HCHAR(1,1,32,29):: CALL HCHAR (24, 1 ,32,29)
640 FOR I=450 TO 850 STEP 25 :: CALL SOUND(50,I,3):: NEXT I
650 FOR T=850 TO 450 STEP -25 :: CALL SOUND(50,T,3):: NEXT T
660 DISPLAY AT(7,10):"GAME OVER"
670 DISPLAY AT(9,6):"YOU HAD ";POINT;"POINTS"
680 DISPLAY AT(12,2):"WANT TO PLAY AGAIN? (Y/N)"
690 ACCEPT AT(12,27)VALIDATE("YN"):R$
700 IF R$="N" THEN 730
710 CALL HCHAR(12,4,32,26):: CALL HCHAR(7,12,32,9):: CALL HCHAR(9,6,32,24)
720 FL=1 :: GOTO 270
730 CALL CLEAR :: CALL DELSPRITE(ALL):: CALL SCREEN(14):: DISPLAY AT(12,10):"GOOD BYE"
740 GOSUB 920 :: END
750 CALL CLEAR :: CALL SCREEN(12)
760 PRINT "LAND YOUR PARATROOPERS ON","DROP PADS WORTH 75, 50, OR"
770 PRINT "25 POINTS. RELEASE EACH","WITH THE FIRE BUTTON ON", "JOYSTICK #1 OR THE (Q) KEY."::
780 PRINT "IF YOU MISS, YOU WILL DRIFT","INTO THE OCEAN AND LOSE 10"
790 PRINT "POINTS. YOU CAN ONLY LOSE","10 TROOPERS BEFORE THE","GAME ENDS.": : :: PRINT "THE WIND SPEED AND WEIGHT"
800 PRINT "OF EACH TROOPER ARE DIS-","PLAYED AT THE BOTTOM OF THE","SCREEN. CONSIDER THE SPEED"
810 PRINT "OF DESCENT AND THE DRIFT --"
820 PRINT "CHECK THESE BEFORE RELEASING","EACH PARATROOPER."::
830 PRINT TAB(10);"GOOD LUCK!"::
840 PRINT TAB(4);"PRESS ANY KEY TO BEGIN"
850 CALL KEY(0,K,S):: IF S=0 THEN 850
860 CALL CLEAR :: DISPLAY AT(8,6):"PARATROOPER RANK ?"
870 DISPLAY AT(1,2) : "<N>OVICE OR <E>XPERIENCED"
880 ACCEPT AT(8,24)VALIDATE("EN"):C$
890 IF C$="E" THEN 910
900 CALL MAGNIFY(2):: Z=10 :: GOTO 140
910 Z=5 :: GOTO 140
920 CALL SOUND(300,330,3):: CALL SOUND(300,392,3)
930 CALL SOUND(500,392,3):: CALL SOUND(200,349,3)
940 CALL SOUND(100,330,3):: CALL SOUND(200,294,3)
950 CALL SOUND(300,330,3):: CALL SOUND(300,349,3)
960 CALL SOUND(300,370,3):: CALL SOUND(300,392,3)
970 CALL SOUND(250,440,3):: CALL SOUND(150,524,3)
980 CALL SOUND(500,524,3)
990 CALL SOUND(300,583,3):: CALL SOUND(100,523,3)
1000 CALL SOUND(200,440,3):: CALL SOUND(300,392,3)
1010 RETURN



 

Share this post


Link to post
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.

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