Jump to content
IGNORED

TI Basic + sprite games


ramidavis

Recommended Posts

Wow! All this is extremely interesting, but not practical for the more normal BASIC programmer. However, TI BASIC PLUS (TIB+) includes the full 32 sprite capability (thanks to Mark Wills) using CALL's to assembly language routines. It can be implemented using E/A, Mini Memory, or a GRAM device or a disk controller with the Myarc disk controller DSR that includes TI BASIC support. Currently the best solutions are an 80K MG GramKracker or HSGPL card, and hopefully, the FinalGROM99 will provide the ultimate solution. These three versions will allow the user to write TI BASIC programs of up to 40K and more with GROM base switching. Hopefully this is enough to "wet the appetites" of some of the would be BASIC programmers out there.

 

 

Bill, could you please start a thread here in the Development forum for TIB+ discussions? I have been intrigued by this project for at least a decade now, and I am eager to hear your progress, how your hardware issues turned out, and if you have plans on implementing TIB+ somehow in conjunction with the FG99 cardridge. It's good to see you contributing here, my friend. I miss our conversations.

Link to comment
Share on other sites

Hmm I put out a version of RXB that switched GROMs using a second banks of GROM for EA Cart including the Editor, GPL Assembler, EA Assembler and EA support for TI Basic.

 

>9800 Any other page of GROM up to >983C

______________________________________________________________

RXB GROM 3 to 6 Editor/GPL Assember/Assembler/EA Support

REA GROM 7

 

When in REA Cart would switch GROM and load requested support routines into RAM.

Yes, this was also done with the original release of the Gram Kracker. TI XB was loaded in GRAM 3 - 6, and TI EA was moved to GRAM 7. They also included a lower case character set that could be loaded in GRAM 0 for the 80K version of GK. Of course I load the Tursi modified version of your TI BASIC in GRAMs 1 & 2, so that the EA enhancements work for TI BASIC programs running in GRAMS 3 - 7. Which means it will be possible to load 40K of different TI BASIC programs in all available GROM pages. Hopefully Ralph will be able to make this a reality in the next update to FG99.

  • Like 1
Link to comment
Share on other sites

 

 

Bill, could you please start a thread here in the Development forum for TIB+ discussions? I have been intrigued by this project for at least a decade now, and I am eager to hear your progress, how your hardware issues turned out, and if you have plans on implementing TIB+ somehow in conjunction with the FG99 cardridge. It's good to see you contributing here, my friend. I miss our conversations.

Probably a very good idea, as there are some areas I need assistance, like I had earlier. Ralph has already agreed to look into making GROMs 0 - 2, maybe only 1 & 2, available for programming. I have not heard back from him on this issue since last October. I still have a few issues to fix with my replacement TI support PC, before I can do this. I'll post an announcement in this thread when I do it.

Link to comment
Share on other sites

Yes, this was also done with the original release of the Gram Kracker. TI XB was loaded in GRAM 3 - 6, and TI EA was moved to GRAM 7. They also included a lower case character set that could be loaded in GRAM 0 for the 80K version of GK. Of course I load the Tursi modified version of your TI BASIC in GRAMs 1 & 2, so that the EA enhancements work for TI BASIC programs running in GRAMS 3 - 7. Which means it will be possible to load 40K of different TI BASIC programs in all available GROM pages. Hopefully Ralph will be able to make this a reality in the next update to FG99.

Hmm NO that is not what I said at all.

The RXB/REA used on of the other GROM Base Address entirely, you just described what RXB 2015 does with EA in GROM 7.

 

As stated RXB and REA in different GROM PAGEs >9800 to >983C would find each other using flags I set up when the RXB or

REA was selected. VDP address >3EF4 stored the GROM address of the alternate GROM used for either RXB or REA.

 

If you started in REA it would save the GROM LSB Address second bytes of >00 to >3C which would be the is the address to return.

 

Exampe: RXB >9800 -------------------- REA >983C --------------- VDP Address >3EF4 would contain >3C (location of REA)

 

RXB could would always reside at >9800 GROM BASE and REA could be loaded into any other GROM BASE wanted.

Edited by RXB
Link to comment
Share on other sites

Hmm NO that is not what I said at all.

The RXB/REA used on of the other GROM Base Address entirely, you just described what RXB 2015 does with EA in GROM 7.

 

As stated RXB and REA in different GROM PAGEs >9800 to >983C would find each other using flags I set up when the RXB or

REA was selected. VDP address >3EF4 stored the GROM address of the alternate GROM used for either RXB or REA.

 

If you started in REA it would save the GROM LSB Address second bytes of >00 to >3C which would be the is the address to return.

 

Exampe: RXB >9800 -------------------- REA >983C --------------- VDP Address >3EF4 would contain >3C (location of REA)

 

RXB could would always reside at >9800 GROM BASE and REA could be loaded into any other GROM BASE wanted.

I have no issue with that. I just want as much space in GROM 3 - 7 (all GROM bases) for TIB+ programs not occupied by other modules (RXB+EA or TIXB+EA or others). I just choose to create my own modules using TIB+.

  • Like 1
Link to comment
Share on other sites

Eh, it started out as a question about other programs which could do it besides Morphy then ballooned into what you see now. I have not been bothered to move it because of how it started and how it is not really developing anything but teeters on the edge as a programming thread, but more of a demonstration of something impossible.

 

Rather than clutter up the thread with yeas and nays, if enough of the right people like your post I will move it and leave a link in this forum.

  • Like 4
Link to comment
Share on other sites

I do apologise. I was drunk as a skunk on Rum when I commented. Subject still impresses the heck out of me though. Who would have thought these things possible in TI Basic. I certainly don't think anything like this was attempted back in the day at least not with the UK Software scene.

  • Like 1
Link to comment
Share on other sites

I could have made use of this back when I was programming all my games in TI BASIC. Really, just a single sprite with no motion would have made me quite happy, and having a few available would have been bonkers. When did Morphy come out? Was it long enough ago that someone could have done an analysis of it, or was any of that information floating around? Boggles...

  • Like 2
Link to comment
Share on other sites

I could have made use of this back when I was programming all my games in TI BASIC. Really, just a single sprite with no motion would have made me quite happy, and having a few available would have been bonkers. When did Morphy come out? Was it long enough ago that someone could have done an analysis of it, or was any of that information floating around? Boggles...

1984 i think?

Link to comment
Share on other sites

  • 9 months later...

The method for generate Sprites in TI BASIC was discovered in late 1984 from Tesioware (Riccardo Tesio and Corrado Tesio two italian brothers). Something like modify the VDP registers in TI-BASIC.

 

all was published and explained on the italian magazine: MC Microcomputer n34

 

pages 152 and 152

 

attachicon.gif1sprite.JPG attachicon.gif2sprite.JPG

 

trying to translate from italian some parts of the published text, it says:

 

"...As you can see, the TI BASIC interpreter can be enchanted and sprites can also be obtained on the unexpanded TI-99/4A. For the avoidance of misunderstandings, we inform you that the sprites thus obtained will not have the same versatility as those supplied using the extended basic which provides a very complete set of instructions for sprites management like movement, magnification, overlap, etc.

 

However, these sprites obtained with the TI-BASIC only and a cassette recorder have some remarkable properties:
- they are not affected by other characters that scroll underneath without deleting them;
- can be placed anywhere on the screen within a coordinate system with 192x256 positions;
- They allow to realize a "pixel to pixel" movement (using the special program) avoiding the annoying effect of flicker that is instead obtained by moving a figure inside the 24x32 grid of print positions.
It is possible for example (just taking advantage of the fact that sprites and normal characters overlap without erasing each other) to be able to draw scenarios and backgrounds for your games without these being erased during the action.
[....]
as you can see the speed is not excessive, but the merits of these sprites such as transparency, absence of flicker, independent colors, possibility of speed adjustment, opens new horizons to improve the programs in TI BASIC. [...]
"
in the issues n35 of the MC Microcomputer, there was the listing of Morphy:
which used precisely this explained technique:

 

 

Hope that this help to understand better icon_smile.gif

 

Iv'e been wondering recently if someone would be so kind as to do a compiled version of Morphy, it's just too slow as a TI Basic program and I think a compiled version would actually be playable.

Link to comment
Share on other sites

  • 2 years later...
On 1/6/2018 at 1:07 PM, senior_falcon said:

gallery_34177_1071_380354.gif

Earlier I had opined that being able to use auto sprite motion was probably not all that useful. Here's a demo that proves me wrong. The little marching man from Notwhoyouthink's demo has been set into motion by manually updating the sprite table. (CALL COLOR(1...) and CALL COLOR(2,...)) The subroutine that updates the column looks for a keypress and if it finds one it jumps the little guy ahead. He does not land exactly where he should but it is close enough, and you just need to update the row and column to get him exactly where he should be. You can see that here sprite motion is quite useful despite the inability to use CALL LOCATE from XB. (This should be used on the latest version of Classic99. Some earlier ones seem to be slow at handling interrupts, so that sound lists and sprite motions happen too slowly.)

 

I just tried this in Win994a and found that it simply exits Win99.. No colorful screen - it just closes the window. So either Win994a or Classic99 is not behaving properly. I will look into it a little more and maybe transfer it to my real TI to see what happens there. @Casey - if you want to test this you would need to change the 55,215 in line 12 to 55,207.

Ciro discovered that the code listed in post #93 has a few errors. I must not have used the "code"  button. Whatever I did caused a couple of lines to be truncated.  Below is the proper code.


2 FOR I=1 TO 128
4 READ X
6 F$=F$&CHR$(X)
8 NEXT I
10 DATA 0,0,0,0,226,0,215,224,1,40,215,204,216,32,131,78,131,212,215,224,131,212,215,224,1,245,4,224
12 DATA 131,196,2,12,67,0,16,17,7,248,55,215,158,142,0,0,0,64,0,21,8,159,212,0,0,3,33,111
14 DATA 0,0,0,0,0,0,0,0,25,202,81,5,77,0,215,224,131,249,215,204,143,60,212,224,0,5,2,140,67,16,17
16 DATA 247,215,224,0,51,215,204,16,0,212,224,0,166,215,224,0,63,215,224,1,153,115,12,212,204,6,12
18 DATA 22,253,4,91,53,103,0,0,131,80,2,4,5,255
110 CALL CHAR(146,"0")
120 CALL CHAR(147,"0")
135 CALL CHAR(152,"1122334455667788")
136 CALL CHAR(153,"99AABBCCDDEEFF10")
140 CALL CHAR(154,"1010101010101010")
150 CALL CHAR(155,"1010101010101010")
155 CALL CHAR(159,"0")
160 CALL CHAR(96,"0F1F1C1C1E1F0F03")
170 CALL CHAR(97,"0303070702020203")
180 CALL CHAR(98,"84C4241424C4841F")
190 CALL CHAR(99,"C43C040480804070")
200 CALL CHAR(100,"0F1F1C1C1E1F0F03")
210 CALL CHAR(101,"0303070703030303")
220 CALL CHAR(102,"80C0201020C18204")
230 CALL CHAR(103,"A8502840000080E0")
240 CALL CHAR(104,"0F1F1C1C1E1F0F03")
250 CALL CHAR(105,"030307070305080E")
260 CALL CHAR(106,"80C0201020C08000")
270 CALL CHAR(107,"0040FF4080008070")
280 CALL CLEAR
290 CALL SCREEN(2)
292 OPEN #1:F$
294 CALL HCHAR(18,1,168,192)
300 CALL COLOR(1,8,8)
310 CALL COLOR(2,1,1)
320 CALL COLOR(4,1,16)
330 REM    sprite walking below            
340 MSB=1
350 LSB=1
360 CALL COLOR(2,MSB,LSB)
370 CALL COLOR(3,13,1)
380 GOSUB 490
390 CALL COLOR(2,MSB,LSB)
400 CALL COLOR(3,13,5)
410 GOSUB 490
420 CALL COLOR(2,MSB,LSB)
430 CALL COLOR(3,13,9)
440 GOSUB 490
450 CALL COLOR(2,MSB,LSB)
460 CALL COLOR(3,13,5)
470 GOSUB 490
480 GOTO 360
490 MSB=MSB-(LSB=16)
500 LSB=LSB+1+16*(LSB=16)
510 CALL KEY(0,K,S)
520 IF S=0 THEN 560
530 CALL CHAR(146,"F008")
531 CALL CHAR(146,"FA08")
532 CALL CHAR(146,"0608")
533 CALL CHAR(146,"1008")
534 CALL CHAR(146,"0")
535 CALL COLOR(1,8,8)
550 MSB=MSB+1
560 MSB=MSB+16*(MSB>16)
570 RETURN

 

  • Like 2
Link to comment
Share on other sites

On 1/9/2018 at 10:08 PM, senior_falcon said:

gallery_34177_1071_167122.gif

Here is a simple demo using moving sprites with nothing but TI BASIC. Press any key to launch the missile. The animated GIF makes the motion somewhat jerky, but it is smooth on Classic99.

There is no CALL COINC, so how do you determine whether the missile hits the UFO? Actually it is not that hard. You set it up so the UFO always starts at the same location and with the same velocity.

The missile always starts from the same location and launches with the same velocity. Then by counting the number of loops before the key is pressed you can determine at the time of launch whether the

UFO will be intercepted. If it is a miss then you let the missile fly off the screen. If it is a hit you freeze the missile and UFO together, erase them and set off an explosion. The missile flight is just for visual effect.

Hardly a ground breaking game but it does show some of the possibilities for this technique. A bowling game might be possible using this.

I do not know if the timing would be right on real iron, and I think it would be off with a European TI running at 50 Hz.

Ciro likes to make my life difficult ? This was post #99 and as before, he found that in the code I posted some of the lines were truncated. Below is the proper code. 

 


100 CALL CHAR(159,"0")
110 FOR I=1 TO 128
120 READ X
130 F$=F$&CHR$(X)
140 NEXT I
150 DATA 0,0,0,0,226,0,215,224,1,40,215,204,216,32,131,78,131,212,215,224,131,212,215,224,1,245,4,224
160 DATA 131,196,2,12,67,0,16,17,7,248,55,215,158,142,0,0,0,64,0,21,8,159,212,0,0,3,33,111
170 DATA 0,0,0,0,0,0,0,0,25,202,81,5,77,0,215,224,131,249,215,204,143,60,212,224,0,5,2,140,67,16,17
180 DATA 247,215,224,0,51,215,204,16,0,212,224,0,166,215,224,0,63,215,224,1,153,115,12,212,204,6,12
190 DATA 22,253,4,91,53,103,0,0,131,80,2,4,5,255
200 CALL CHAR(146,"0")
210 CALL CHAR(147,"0")
220 REM  colors 
230 CALL CHAR(152,"1122334455667788")
240 CALL CHAR(153,"99AABBCCDDEEFF10")
250 CALL CHAR(154,"F0F0F0F0F0F0F0F0")
260 CALL CHAR(155,"F0F0F0F0F0F0F0F0")
270 REM  missile 
280 CALL CHAR(92,"0103030303030304")
290 CALL CHAR(93,"0")
300 CALL CHAR(94,"0080808080808040")
310 CALL CHAR(95,"0")
320 REM  saucer patterns 
330 CALL CHAR(96,"01033FFFDEFF3F07")
340 CALL CHAR(97,"0")
350 CALL CHAR(98,"0080F8FEF6FEF8C0")
360 CALL CHAR(99,"0")
370 REM  explosion 
380 CALL CHAR(100,"0041055000052189")
390 CALL CHAR(101,"2310060110044001")
400 CALL CHAR(102,"80220008806200A0")
410 CALL CHAR(103,"D580248008A00200")
420 OPEN #1:F$
430 REM  saucer 
440 CALL CLEAR
450 CALL SCREEN(2)
460 CALL CLEAR
470 PRINT "HITS:";HIT;"         MISSES:";MISS;
480 REM  missile
490 CALL COLOR(1,12,8)
500 CALL COLOR(2,8,12)
510 CALL COLOR(3,12,13)
520 CALL COLOR(4,1,9)
530 REM  saucer
540 CALL COLOR(5,2,1)
550 CALL COLOR(6,1,1)
560 CALL COLOR(7,13,1)
570 CALL COLOR(8,1,8)
580 X=0
590 N=0
600 CALL CHAR(146,"00000000000A")
610 CALL KEY(0,K,S)
620 X=X+1
630 IF X=73 THEN 840
640 IF S<1 THEN 610
650 CALL CHAR(146,"E0000000000A")
660 IF (X<19)+(X>25)THEN 690
670 TOP=106
680 GOTO 700
690 TOP=130
700 N=N+1
710 IF N<TOP THEN 700
720 IF TOP=130 THEN 810
730 CALL CHAR(146,"0")
740 HIT=HIT+1
750 CALL COLOR(3,13,5)
760 CALL COLOR(4,1,16)
770 CALL COLOR(8,1,1)
780 FOR I=1 TO 300
790 NEXT I
800 GOTO 850
810 CALL CHAR(146,"00000000000A")
815 CALL KEY(0,K,S)
820 X=X+1
830 IF X<55 THEN 815
840 MISS=MISS+1
850 GOTO 460

 

  • Like 5
Link to comment
Share on other sites

6 hours ago, senior_falcon said:

Ciro likes to make my life difficult ? This was post #99 and as before, he found that in the code I posted some of the lines were truncated. Below is the proper code. 

 

 

Thanks @senior_falcon for the update. And I am sorry to say that I still need to make your life difficult a bit ? this is why I feel so dumb that I can't be able to understand why the MISSILE/UFO code still not perfectly works for me.
I had to try to fix that truncated lines adding " , 8 ) " but I have had the same bad result compared to the .GIF video you posted as demo to show.

this is my result:

Link to comment
Share on other sites

I don't know why this wouldn't work for you. Try copying the code and then be sure you are in TI BASIC and use "paste", not "paste XB'. That works for me.

I copied and pasted the faulty code, added the ,8 to lines 490 and 570 and that also worked.

If still doesn't work I will send you the file for this.

  • Like 1
Link to comment
Share on other sites

Ok, I do not know why but was my modified Classic.ini file that create problems with this MISSILE program, now I installed the standard one and it works ? I really didn't thought about the INI files problem also because all other examples worked good, just with this I had the problem.

anyway thanks ? important is that I can try it now 

 

 

  • Like 1
Link to comment
Share on other sites

2 hours ago, ti99iuc said:

Ok, I do not know why but was my modified Classic.ini file that create problems with this MISSILE program, now I installed the standard one and it works ? I really didn't thought about the INI files problem also because all other examples worked good, just with this I had the problem.
anyway thanks ? important is that I can try it now 

Can you tell me what was different? Unless it was disk configuration, I'd want to fix any bugs rather than have people just work around them. 

 

  • Like 2
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...