ramidavis Posted December 18, 2017 Share Posted December 18, 2017 (edited) 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 December 18, 2017 by ramidavis 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted December 18, 2017 Share Posted December 18, 2017 Hmm XB has Sprites TI Basic does not? Quote Link to comment Share on other sites More sharing options...
Retrospect Posted December 18, 2017 Share Posted December 18, 2017 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? 1 Quote Link to comment Share on other sites More sharing options...
+Lee Stewart Posted December 18, 2017 Share Posted December 18, 2017 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 1 Quote Link to comment Share on other sites More sharing options...
ramidavis Posted December 18, 2017 Author Share Posted December 18, 2017 (edited) 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 smartball screenshot1.PNG smartball screenshot2.PNG Well done asharot! Check out the BASIC on CART Contest (BoCC) Entries thread. Edited December 18, 2017 by ramidavis 1 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted December 18, 2017 Share Posted December 18, 2017 (edited) 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 December 18, 2017 by mizapf 1 Quote Link to comment Share on other sites More sharing options...
ramidavis Posted December 18, 2017 Author Share Posted December 18, 2017 (edited) 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 December 18, 2017 by ramidavis 3 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted December 18, 2017 Share Posted December 18, 2017 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. Quote Link to comment Share on other sites More sharing options...
ti99iuc Posted December 18, 2017 Share Posted December 18, 2017 (edited) 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 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: http://www.digitanto.it/mc-online/PDF/Articoli/035_152_159_0.pdf Hope that this help to understand better Edited December 18, 2017 by ti99iuc 7 Quote Link to comment Share on other sites More sharing options...
+adamantyr Posted December 18, 2017 Share Posted December 18, 2017 A VERY cool looking game! TI-BASIC is certainly capable of doing some good stuff, as I discovered when writing Aperture. I'm just ready to move on to other things. 2 Quote Link to comment Share on other sites More sharing options...
digdugnate Posted December 18, 2017 Share Posted December 18, 2017 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. 1 Quote Link to comment Share on other sites More sharing options...
Retrospect Posted December 19, 2017 Share Posted December 19, 2017 (edited) 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 December 19, 2017 by Retrospect 1 Quote Link to comment Share on other sites More sharing options...
notwhoyouthink Posted December 19, 2017 Share Posted December 19, 2017 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 4 Quote Link to comment Share on other sites More sharing options...
+arcadeshopper Posted December 19, 2017 Share Posted December 19, 2017 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 Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted December 19, 2017 Share Posted December 19, 2017 That is really damn neat. 1 Quote Link to comment Share on other sites More sharing options...
Retrospect Posted December 19, 2017 Share Posted December 19, 2017 It is neat isn't it! Thankyou, NotWhoYouThink. A rather intriguing program .... I've been staring at it and again, it really seems as though some of the 8x8 char cells are occupying more than 2 colours. I might be wrong, it might be my eyes that are shot. Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted December 19, 2017 Share Posted December 19, 2017 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. 3 Quote Link to comment Share on other sites More sharing options...
Count9929A Posted December 19, 2017 Share Posted December 19, 2017 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! very nice thread ramidavis 4 Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted December 19, 2017 Share Posted December 19, 2017 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. 3 Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted December 20, 2017 Share Posted December 20, 2017 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. 2 Quote Link to comment Share on other sites More sharing options...
ti99iuc Posted December 20, 2017 Share Posted December 20, 2017 (edited) 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 (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": 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: 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 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 December 20, 2017 by ti99iuc 5 Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted December 20, 2017 Share Posted December 20, 2017 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": 1a.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? Quote Link to comment Share on other sites More sharing options...
+adamantyr Posted December 20, 2017 Share Posted December 20, 2017 I'm wondering that myself... the value being passed (>42EE) preceded by six zeros makes little sense to me. A GPL command? The value it's setting the register to (Register #5, value 15) makes sense. That places the sprite attribute table at >0780 which overlaps where character sets 15 and 16 are. 1 Quote Link to comment Share on other sites More sharing options...
Retrospect Posted December 21, 2017 Share Posted December 21, 2017 (edited) 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 December 21, 2017 by Retrospect 1 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted December 21, 2017 Share Posted December 21, 2017 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. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.