Jump to content
IGNORED

TI Basic + sprite games


ramidavis

Recommended Posts

I know morphy is not the only game that did this.

There was some sort of mini-golf like game, but can not remember the name.

Just found that one:ball 2.0 a.k.a smart ball

 

I think i remember reading some place there was a maze/labyrinth game that used a sprite in TI Basic too.

 

Anyway, a list of all known "sprites under ti basic" games would be good.

Edited by ramidavis
  • Like 1
Link to comment
Share on other sites

Hmm XB has Sprites TI Basic does not?

 

I'm thinking the games that are TI Basic with sprites are when combined with the Mini-Memory cartridge?

 

 

...or the Editor/Assembler cartridge.

 

...lee

No, No, and NO.

Morphy and smart ball use a special loader on cassette, right out of TI basic.

Steps for TI-99/4A + Tape Recorder:
 
1. (Only first time) Enter Ti BASIC and digit and RUN this program 
   (or load BOOT file)... 
100 CALL CLEAR
110 INPUT "REGISTRO(0-7),DATO(0-255)? ":R,D
120 A=18429-(256*R+D)
130 X$=CHR$(O)
140 OPEN #1:"CS1",OUTPUT,FIXED
150 PRINT #1:X$&X$&X$&X$&X$&X$&CHR$(INT(A/256))&CHR$(A)
 
2. (Only first time) Run program and insert 5,15 like input, then press ENTER key.
 
3. (Only first time) Program run and write (SAVE CS1) on tape a special file...
 
4. (Only first time) Reset Ti99/4A.
 
5. Enter Ti-Basic and Load special file from tape with OLD CS1.
 
6. RUN program and after few seconds, screen shows black lines.
   Press any key (letter A,B ecc.) and ENTER key: you get MEMORY FULL.
 
7. Write NEW and press ENTER key.
 
8. Load TI BASIC game BALL from tape with OLD CS1 and RUN game.

Same process for morphy.

Excerpt from http://atariage.com/forums/topic/174340-bocc-entry-smart-ball-by-asharot/?do=findComment&comment=2166669

 

Well it seems our italian friend has been busy and wrote a cool BoCC entry called "Smart Ball".

He's been very modest about it, and I don't want this great game to pass by unnoticed.

 

The cool thing is that this is a TI-Basic game using a sprite!

You thought that isn't possible? Well actually it isn't, but he used a nice little trick to get a sprite in place nonetheless.

Asharot fiddles with the VDP registers by writing a fake file header on tape and loading it back into memory.

 

The easiest way to try this with an emulator is to use the Mini Memory version of the game (BALL-M).

But as said, a bare TI-Basic console with a tape recorder should do as well.

 

Here are some screenshots

 

attachicon.gifsmartball screenshot1.PNG

 

attachicon.gifsmartball screenshot2.PNG

 

Well done asharot!

 

Check out the BASIC on CART Contest (BoCC) Entries thread.

Edited by ramidavis
  • Like 1
Link to comment
Share on other sites

 

 

No, No, and NO.

Morphy and smart ball use a special loader on cassette, right out of TI basic.

 

Yes, yes and yes. TI BASIC does not support sprites.

 

It's a different thing if you manage to break out of the sandbox in some more or less clever way, which may be the case here, but still there are no real TI BASIC programs with sprites. Or put it this way: There are no TI BASIC commands to create and control sprites, unlike Extended Basic which has them.

 

[Edit:

Since Extended Basic is ubiquitous and adds much more value to the console than just sprites, there is little use for forcing TI BASIC to show sprites; people just make use of Extended Basic or one of its descendants. This was an interesting trick, but not recommended for general use in my view.]

Edited by mizapf
  • Like 1
Link to comment
Share on other sites

All i was trying to do was gather a list of games similar to morphy, that somehow manage to get a "sprite" with out using xb or minimem.

I do not care if it is technically "possible".

Nitpick me over the details all you want.

These games use something that the end user running them would certainly believe to be a "sprite", without needing any additional hardware. (other then a tape player)

Edited by ramidavis
  • Like 3
Link to comment
Share on other sites

I do not care if it is technically "possible".

 

Sounds cool. ;)

 

Just to clarify: It is certainly a nice achievement to force sprites into TI BASIC, in particular because the programming language does not support them. But it is rather a hack than a useful way of programming, and its added value is not really exciting, since most people have some kind of Extended Basic, where this is part of the programming language. That means, most people don't really pursuit that thing, and so there are only few examples of such programs.

Link to comment
Share on other sites

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

 

post-24673-0-25945400-1513617995_thumb.jpg post-24673-0-20566500-1513618176_thumb.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:
post-24673-0-32495600-1513619919_thumb.jpg post-24673-0-62304900-1513619666_thumb.jpg
which used precisely this explained technique:

 

 

Hope that this help to understand better :)

Edited by ti99iuc
  • Like 7
Link to comment
Share on other sites

my dad did some pretty crazy stuff with TI-Basic as I seem to remember, I thought maybe it had to do with some creative editing of headers.

 

I do seem to remember that once he had access to Extended Basic and Assembly those were his preferred methods of coding stuff (like sprites, in your example).

 

I'm still poring over code/etc to see *how* the stuff was done since i'm nearly 30 years removed from the stuff when it was written. :)

  • Like 1
Link to comment
Share on other sites

What was that program for TI Basic where there was some strange , almost "garbled" code in REM statements and it did the LINES program without the need for Mini Mem? It ran straight out of TI Basic stock and was faster than sh*t off a shovel.

 

Is it possible to invoke something "not normal" from TI Basic in the REM statements? (Like when people put assembly stuff in REM statements on other micro's)?

Edited by Retrospect
  • Like 1
Link to comment
Share on other sites

linesBasic.txt

100 FOR I=1 TO 128
110 READ J
120 A$=A$&CHR$(J)
130 NEXT I
140 FOR I=1 TO 102
150 READ J
160 Z$=Z$&CHR$(J)
170 NEXT I
180 DATA 0,0,2,224,131,160,198,12,4,217,194,58,194,90,162,213,215,224,131,183,197,198,215,203,208,30,216,30
190 DATA 131,161,2,2,0,100,16,11,0,0,0,0,0,200,0,0,0,0,53,103,0,0,0,0,192,59,192,155,96,128,2,11,131
200 DATA 0,192,75,2,12,220,94,215,224,131,161,5,194,215,192,16,0,4,140,6,2,22,253,4,91,152,32,131,115,131
210 DATA 179,22,251,16,209,131,62,192,59,131,126,131,114,131,196,131,48,0,6,0,104,140,0,136,0,140,2,0,0,0
220 DATA 0,131,160,77,0,39,227,2,3,131,138,130,72,21,43,2,1,131,168,192,8,2,40,0,4,5,194,6,147,192,5,6
230 DATA 147,2,134,154,32,22,242,5,133,4,202,4,199,2,42,255,250,5,133,192,5,6,1,4,198,7,2,6,147,2,38
240 DATA 255,223,23,228,192,10,10,6,225,198,2,138,255,250,19,239,7,2,192,4,5,132,2,12,215,113,6,160
250 DATA 131,142,6,1,10,135,5,202,16,230,6,160,131,126,27,2,27,106
260 OPEN #1:A$
23296 REM U!!%Y)0'"/#$S!)#AV,)%I05V`)#AI.A&PT)-I0!V`)1!.@SQ(,89)/D"9%7`.@"!A-9!.@SQ108119$&PX8Q2!!V`)1!.>""A17
23371 REM `1;AAXY<;BO1Y)%#A!;#`Y-$B$;&%9@9D!"9`1"!9!4$"=0"1Q8&Q15&R-'%"=9##1#!!AI!9!)(!.-##!#D"K#$@BO3'`9#!(A!
23446 REM I=12!Q+(!1!2!A5%I=3C"B%$!IA!Q"%#"1;C"K*$%1-#C1%!%1)&![*$II52!Q++!-!2!A5&II5#!9/O!A)!"A)-VX%'I)//!C!!
23521 REM #!+!?I!7VQ)!.`D)!).U"K#$@BPY('A#!9.UJ'!!%M!2!I![A"9%"K#$@BV'(<)#!9/O!A)!"A;AAYI%R!)&!!("B=$(#I/AS'(*
23596 REM &A%(""5#"15&"W)+&1)&"A5)Q+#$RB9(!A)>;[A#A]!4`=#AA]!+QA)")!#!1B1"Q)()!I.W"K#$@BRK(.1#!9/ZQQI+8/-+!ET`
23671 REM "[-*Q!E#1!!(9Q$8U1),A!$8T!M,]N\!#>@2!GR!!.@-!CTA!.>,#I$8U;!+V]Q#<%!!EJY7"A<-V]Q'T.@-VW#$>I$!&A1'I)._
23746 REM (.9>2-%%%1/C27%)%-WCBK%(%-I$!!!#!Q!!!!)!"1!#!Y/K"-1#$!!E--!#$!!'"Q)W!A6#Y1,-QA)A`Q!9]Q)'A]A+'"=-!A?$
23821 REM RM!7&AE(&M!8%Q)%VR!%R?#$Q"!"".9#+O]!&A%%'M%%&A1'I)._'`A=;.@AA^1%Y)07V_#$V2$-!A)!#A4%"A17`A9#&PQ#!9/G
23896 REM Q##$Q!)A(7M4`=#!%1-#1A!(%!)#9P`YT%)#A9/O&P,)!)0!!A![?!)#!!9'I)/+!A!!1!;AAVI#!!"A"K#$7A;AAXY<EBPWV]!'
23971 REM Q.@!"M!#!BA!VU!'!B<^"&M
  • Like 4
Link to comment
Share on other sites

What was that program for TI Basic where there was some strange , almost "garbled" code in REM statements and it did the LINES program without the need for Mini Mem? It ran straight out of TI Basic stock and was faster than sh*t off a shovel.

 

Is it possible to invoke something "not normal" from TI Basic in the REM statements? (Like when people put assembly stuff in REM statements on other micro's)?

 

well the rem statements are the ascii representation of the program binary which effectively loads ram with the program, then the program runs the exploit that uses a giant filename to run unsigned code which i assume jumps to the binary code already in ram thanks to the basic program's memory location

Link to comment
Share on other sites

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

 

in the issues n35 of the MC Microcomputer, there was the listing of Morphy:

 

which used precisely this explained technique:

 

http://www.digitanto.it/mc-online/PDF/Articoli/035_152_159_0.pdf

 

Excellent. Good info. Thanks for bringing the topic back on track. :thumbsup:

 

  • Like 3
Link to comment
Share on other sites

I have been looking at this and think that you could have 32 sprites in a TI BASIC program with auto sprite motion, all controlled with CALL CHAR statements. Since there is no CHARPAT in TI BASIC you would not be able to use auto sprite motion and find out the location of a sprite, but I still think interesting programs could be written using this "impossible" technique. I will study this a little more tonight.

 

For the life of me I cannot see how this technique can change a VDP register, but clearly it can! Anyhow, there is more than one way to divest a feline of its fur and I have an alternate method that may be more versatile.

  • Like 3
Link to comment
Share on other sites

Looks like I spoke too soon about the auto sprite motion. I forgot that the sprite descriptor table has to start at V0300. The only thing that TI BASIC can modify in that area is the color table. You could create 4 sprites in that location using CALL COLOR but it would be cumbersome to say the least, with 4 call colors per sprite.

 

You could get all 32 sprites as long as you didn't use auto sprite motion by setting R5 to be >0F. Then you would use CALL CHAR (144 to 159) to create the sprites and you could get 2 sprites per CALL CHAR. This is what Ciro did. Also you can change R1 to get the 4 different sprite sizes. The changes to the registers survive a NEW. (Actually you wouldn't have to change R1 - just put the value into >83D4 and when you press a key the register would be changed. I think that using the method used by Playground would do this fine without all the chaotic color changes produced by Ciro's method. The method used by playground trashes half the scratchpad but I think you could change the registers as desired, then have the BASIC interpreter do a NEW.

  • Like 2
Link to comment
Share on other sites

I have been looking at this and think that you could have 32 sprites in a TI BASIC program with auto sprite motion, all controlled with CALL CHAR statements. Since there is no CHARPAT in TI BASIC you would not be able to use auto sprite motion and find out the location of a sprite, but I still think interesting programs could be written using this "impossible" technique. I will study this a little more tonight.

 

For the life of me I cannot see how this technique can change a VDP register, but clearly it can! Anyhow, there is more than one way to divest a feline of its fur and I have an alternate method that may be more versatile.

 

Looks like I spoke too soon about the auto sprite motion. I forgot that the sprite descriptor table has to start at V0300. The only thing that TI BASIC can modify in that area is the color table. You could create 4 sprites in that location using CALL COLOR but it would be cumbersome to say the least, with 4 call colors per sprite.

 

You could get all 32 sprites as long as you didn't use auto sprite motion by setting R5 to be >0F. Then you would use CALL CHAR (144 to 159) to create the sprites and you could get 2 sprites per CALL CHAR. This is what Ciro did. Also you can change R1 to get the 4 different sprite sizes. The changes to the registers survive a NEW. (Actually you wouldn't have to change R1 - just put the value into >83D4 and when you press a key the register would be changed. I think that using the method used by Playground would do this fine without all the chaotic color changes produced by Ciro's method. The method used by playground trashes half the scratchpad but I think you could change the registers as desired, then have the BASIC interpreter do a NEW.

 

First of all, I would like to point out that I have done nothing and this is not my method but it is the method studied by Tesioware Italian brothers developers as already explained in the relative post in this thread :P (I like and find it right to always give credit to those who deserve them). I just shared information about it and hoped to help to clarify some details.

 

I have to say that i am very happy to know that you are doing some tials on this method senior_falcon and i would always liked the idea to know the opinion on this method from people that know well how to code on a TI-99/4A :)

 

I tried to load the Morphy on my F18a TI99 but it is not working (all is ok on loading part1+part2 of the program also but the main sprite not appear nel gioco), so i needed to try out the standard TI99 and the recorder only to try and all is works good there.

 

The method explained on the magazine tell that for modify the VDP in TI BASIC we need to write on the TI99 the first program named"GENERATORE FILES PER MODIFICARE I REGISTRI VDP":

post-24673-0-84873100-1513769860.jpg

This program will allow us to generate a record with a false header.

after the RUN it will ask (by the line 110) to insert the values of the VDP registers but we can be able to use only the number 5.

the seconde value to specify that the character map to be used will be 144 to 159. So the value that we will insert in the input will be 5,15.

 

after this the computer will ask to save the program into a cassette tape and we have to do it (i used an empty tape of course :) )

 

this will be the first step needed to use the sprites in TI BASIC.

 

at this point after the QUIT of our TI-99/4A we will need to load the saved program previously on our tape and wait to view a black screen with horizontal rows.

Only at this point press one of the any letters on the keyboard and press enter. We should have an almost normal screen and a message *MEMORY FULL

 

It is ok and we have to digit the command NEW and enter.

 

 

After this we are finally ready to develope something using the new sprite map that is moved on the 144 to 159.

on the magazine it is described that 32 sprites can be accessible (2 for each character)

 

the call is:

 

CALL CHAR (144,"Y1X1F1C1Y2X2F2C2")

CALL CHAR (145,"Y3X3F3C3Y4X4F4C4")

etc...

 

where Y is the row number(0-191), X the column number (0-255), F is the Form (ASCCII code+96), C is the color (Basic code minus 1).

all numbers must be written in hexadecimal. If Y will have a value 208 (D0 in hexadecimal) that one and all the following sprites will not be displayed.

 

some examples:

 

CALL CHAR (144,"D") will delete all the sprites.

 

or

 

CALL CHAR (144,"6080a10FD") will print a white "A" in the middle of the screen.

 

or

 

CALL CHAR (144,"0080AD800088A306")

 

CALL CHAR (145,"D") will write a red "MC" in the top screen

 

you also can see that if you will write something on your keyboard and will press Enter several times,

the text will scroll but not the sprites present on the screen.

 

if you want write this example:

post-24673-0-81576000-1513772175.jpg

 

you will see a "@" character that will move vertically pixel to pixel.

 

All this i wrote is the translation on what is written on the italian magazine :)

Hope that this will help to clear better and also that i have done a good translation :P

 

 

 

It's really nice to discover that Italians gave important technical contribution to the TI.

I hope that Ciro and others could continue this tradition!

 

I am agree, the historical preservation is important and i am doing my best until the TI99 passion will live in me. thanks you for appreciating.

Edited by ti99iuc
  • Like 5
Link to comment
Share on other sites

 

The method explained on the magazine tell that for modify the VDP in TI BASIC we need to write on the TI99 the first program named"GENERATORE FILES PER MODIFICARE I REGISTRI VDP":

attachicon.gif1a.JPG

This program will allow us to generate a record with a false header.

after the RUN it will ask (by the line 110) to insert the values of the VDP registers but we can be able to use only the number 5.

the seconde value to specify that the character map to be used will be 144 to 159. So the value that we will insert in the input will be 5,15.

 

after this the computer will ask to save the program into a cassette tape and we have to do it (i used an empty tape of course :) )

************************************************************************************************************

This is what I don't understand. What is this false header and how does it modify the vdp register?

Link to comment
Share on other sites

If you're talking false headers, and the like, I'd try doing something with this;
http://nivelleringslikaren.eu/ti994a_basic/

With that website, you can write a TI program and save it to a disk image. The point I'm making is; you can write things that would never be passed by the parser, save it as an image, and literally ram it into classic99 or js99er (or mess?)

 

Now, I don't know what I'm doing, but I know others do and I bet at least one person's brain just lit up. All I've ever done is make it crash upon loading illegal instructions/words. A cleverer person or someone more knowledgeable might be able to take advantage of this.

Edited by Retrospect
  • Like 1
Link to comment
Share on other sites

With that website, you can write a TI program and save it to a disk image.

It produces a TIFILES, not a disk image (like DSK), unless I'm missing something.

 

With that website, you can write a TI program and save it to a disk image. The point I'm making is; you can write things that would never be passed by the parser, save it as an image, and literally ram it into classic99 or js99er (or mess?)

 

As for MAME, not directly ramming into it, but you copy it on a disk image first and then load it from that image. Same effect, though.

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