+Ksarul Posted November 22, 2015 Share Posted November 22, 2015 Nice use of the Playground. . . Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted November 23, 2015 Author Share Posted November 23, 2015 @Lee and Dragonstomper I am truly amazed by your skills and tenacity towards Gazoo's challenge. I am so glad that he could see his last challenge accomplished thanks to your help. I think that what you 3 did is holywood material. Was software your hobby or did you work as software developers during your life? You seem to be pros, I'm all for making a movie of this story. Just for realism I would like to play myself, and there should be a hot young starlet written into the script as my romantic companion. Hollywood, here I come!! Writing software has been a hobby of mine since the mid 1980's. I am self taught and have always used the TI99. My lack of training means I'm too dumb to know that something can't be done, and so I just persist until I can find a way to do it. 2 Quote Link to comment Share on other sites More sharing options...
Omega-TI Posted November 23, 2015 Share Posted November 23, 2015 I'm all for making a movie of this story. Just for realism I would like to play myself, and there should be a hot young starlet written into the script as my romantic companion. Like Mila? Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted November 23, 2015 Author Share Posted November 23, 2015 Hi all,let me introduce myself i was the pround owner of a ti when was twelve, 34 years ago,I'm from Paris,that's why my english is so poor apologize,and you could be sure that PARIS WILL LIVE. I wrote this piece of s... because PLAYGROUND was the prog that always wanted to have. It's basicaly a simple assembler disassembler in playgroung env. ALL Values are in Hex ,OP codes and commands DATA,END,NEW,AORG,OLD CS1 Let me know what you think about this. Moije, the entire civilized world stands with the French people in this sad time. Your english is nothing to apologize for - it is perfectly understandable. Now if you really wanted to have some fun I could post a letter using my one year of French that I barely passed 50 years ago, but it would not be nice to subject you to such torture! Can you upload your program all assembled and ready to RUN in BASIC, and also any instructions needed to use the program. This looks interesting and it is really nice to see someone actually doing something with my program. 1 Quote Link to comment Share on other sites More sharing options...
moije Posted November 23, 2015 Share Posted November 23, 2015 (edited) Thank you senior_falcon for your support and congratulations for writting this code. Now I'm not sure what path to take: a) try to write a real assembler dedicated to PG with labels and counting bytes or control structures like C/Pascal b) make a RAM emulator from VDP(emulate a 9900 in a ti99!) at run time or compiled what do you think BIG KIDS? I'm really not convinced of my skills for those tasks... Edited November 23, 2015 by moije Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted November 25, 2015 Author Share Posted November 25, 2015 Hi Moije: It looks very interesting, but so far I have not been able to test out your program. The BASIC program you included will load but hangs immediately when it is run. I have no idea how to load a WAV file. I tried to assemble your source code but every line starts at the first column which makes the assembler very unhappy, and I didn't feel like going through all 1000+ lines to insert spaces or tabs. Your use of POP is very interesting. Can you post more information on how this is accomplished. (And don't worry about your English skills!) Thanks, Harry Quote Link to comment Share on other sites More sharing options...
moije Posted November 25, 2015 Share Posted November 25, 2015 (edited) Sorry I correct the post now it should assemble. I tried the fiad file with classic99 and the wav file with mess. In mess there is a bug you must type "run" not "RUN" don't know why???? Ok i understand,my idea was to use this to make small utilities from XB to SB like merge,peek,poke,sprite,motion,charpat,magnify with only the loader no page but know i can see that it must use scroll to start isn't it senior_falcon? Edited November 25, 2015 by moije Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted November 28, 2015 Author Share Posted November 28, 2015 OK, now the source code assembles without error. But it still doesn't run - I think that is because you have made some changes to the loader to allow a stack. As it turns out, KDA runs but not every time. Sometimes it hangs and sometimes it works fine. I will dig a little deeper into your code to see what you have done. Your use of a stack seems very useful but it will take me some time to figure out your technique for this. I have finally found someone who uses fewer comments than I do! Of course, if you had used comments they would probably be in French, so they wouldn't help me anyway. Quote Link to comment Share on other sites More sharing options...
moije Posted November 28, 2015 Share Posted November 28, 2015 (edited) As I said the problem is with the interrupt we can't know when it will occcur. We can restore the original user interrupt but then no possibility to bypass the scroll or the clearscreen. And so no utility that could return to basic without changing the screen. For comments in my code,it would take me a realy long time to write them in English. I know it's very hard to understand assembly without comments,if you want I can try but i'm not sure to continue thru that way: Assembler; Ram emu ? When I wrote the dsrlnk I found that it uses >83D0 and >83D2 and I wanted to keep the code small not to reproduce routines like nibble to bin,word to bin,print nibble,print word I decided to emu the intel 8086 stack and for furter devel. maybe C like structures as It was designed for stack based cpus. ex: mov bp,sp MOV R9,R8 sub sp,4 AI R9,-4 mov [sp+2],ax MOV R0,@2(R9) mov ax, LI R0, ... do something mov sp,bp MOV R8,R9 ret BL @RET DATA POP again from i386 call far ptr that is push segment push offset call seg:off pop offset pop seg to create sub stack push page push offset. We people from France and You people from USA have a lot in common,we realy appreciate what you have done and what you are doing for us and Liberty,thanks again. But this is not the place for that so it will be my last reference to politic in this blog. Edited November 28, 2015 by moije Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted November 28, 2015 Author Share Posted November 28, 2015 Saint Exupery's "Letter to an American" just about says it all. If you have not read this it can be found here: http://www.sheilaomalley.com/?p=3066 You write about returning to BASIC. Since the scratchpad is overwritten by the playground loader I do not see how you could return. If you mean that you do not want to modify anything in the VDP before the assembly program takes over, then I think that can be done. I have disassembled your loader and now will be able to see what is going on. Quote Link to comment Share on other sites More sharing options...
moije Posted November 28, 2015 Share Posted November 28, 2015 (edited) This one is more stable but need the interrupt. The loader itself just overwrites the gpl part of the pad not the basic part >834A is the fac. Edited November 27, 2016 by moije Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted December 11, 2015 Author Share Posted December 11, 2015 I have made a couple of improvements to your modified loader so that it handles the stack pointer differently. I will test this weekend (hopefully) and then post here. 2 Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted December 13, 2015 Author Share Posted December 13, 2015 As written, Playground tricks BASIC into loading code into the scratchpad with an OPEN statement using a string of over 128 bytes in length. 3 things are done in the code that is loaded: 1 - >27E3 is put on the GPL stack. This routine clears the screen, loads the standard character set (upper and lower case), sets the colors. 2 - >4D00 is put on the GPL stack. This scrolls the screen. This does nothing useful, except that scroll in BASIC is slow and you are guaranteed to get an interrupt while scrolling. 3 - sets >83C4 to point to an interrupt routine to look at the gpl stack pointer. Once this routine sees that the TI is doing a scroll it clears the interrupt hook at >83C4 and turns control over to the playground loader starting at >834A where some more initializing is done before going to the page loader. @moije: I understand what you did to modify the pageloader so that you could use a stack for multiple levels of subroutines. What I do not understand is the reason you modified other parts of MAKEBX. Is there something about your program that requires it to be initialized differently? I have modified the pageloader so you do not require INCT R9 before BL @NEXT and have slimmed down the POP subroutine by 2 words. 1 Quote Link to comment Share on other sites More sharing options...
Davvel Posted November 20, 2016 Share Posted November 20, 2016 Can anyone explain, in simple terms, how Playground manages to escape from the Sandbox? What is the trigger that makes it execute an assembly language program and back to basic? Thanks. Quote Link to comment Share on other sites More sharing options...
Asmusr Posted November 20, 2016 Share Posted November 20, 2016 Can anyone explain, in simple terms, how Playground manages to escape from the Sandbox? What is the trigger that makes it execute an assembly language program and back to basic? Thanks. In simple terms the trick is to ask BASIC to open a file with a long (> 128 characters) filename. Because of a bug in the firmware this filename ends up being copied into scratchpad RAM where it overwrites the return address of one of the subroutine calls involved in opening the file. By carefully constructing the filename you can therefore make the subroutine return to an address of your choice. This address can point to machine code you have embedded in the filename, which will then be executed. I hope I got that right. The full explanation is here: http://atariage.com/forums/topic/162941-assembly-on-the-994a/page-11?do=findComment&comment=2849894 1 Quote Link to comment Share on other sites More sharing options...
Davvel Posted November 20, 2016 Share Posted November 20, 2016 In simple terms the trick is to ask BASIC to open a file with a long (> 128 characters) filename. Because of a bug in the firmware this filename ends up being copied into scratchpad RAM where it overwrites the return address of one of the subroutine calls involved in opening the file. By carefully constructing the filename you can therefore make the subroutine return to an address of your choice. This address can point to machine code you have embedded in the filename, which will then be executed. I hope I got that right. The full explanation is here: http://atariage.com/forums/topic/162941-assembly-on-the-994a/page-11?do=findComment&comment=2849894 Thanks Rasmus, this is exactly what I was looking for. Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted November 21, 2016 Author Share Posted November 21, 2016 Can anyone explain, in simple terms, how Playground manages to escape from the Sandbox? What is the trigger that makes it execute an assembly language program and back to basic? Thanks. Couple of points: You cannot return to BASIC. More than half the scratchpad is overwritten and there is no way (at least that I can think of) to figure out where you were in the BASIC. James' method had to ask what the console version was. Turns out you can just put the address of the assembly code in >83C4 and let the interrupt routine start the program. 1 Quote Link to comment Share on other sites More sharing options...
moije Posted July 17, 2017 Share Posted July 17, 2017 (edited) For big kids only! My Kid Kit: Kid EDitor Kid ASsembler Kid LiNker Lines Kid UTiLities: VSBW VMBW VSBR VMBR VWTR KSCAN VMVW VMVR GPLLNK DSRLNK XMLLNK VMBF VWVL MMVRAM BAVRAM EDITOR SCROLL VMBC RANDOM Kid Memory Editor: DWHX RHXW WTKEY MEMED Kid Dis/Assembler Kid 4 Basic: NUMREF STRREF NUMASG STRASG Kid SUBs: LOAD PEEK POKEV PEEKV CHARPAT Kid eXtended Basic: MAGNIFY LOCATE PATTERN COLOR MOTION SPRITE DELSPRITE POSITION COINC DISTANCE CHARSET DISPLAY AT ACCEPT AT INIT LOAD PEEK CHARPAT Kid MerGeR KK.zip Edited 10 hours ago by moije 2 Quote Link to comment Share on other sites More sharing options...
RickyDean Posted July 17, 2017 Share Posted July 17, 2017 For big kids only! My Kid Kit. I'm getting this when clicking " Sorry, you don't have permission for that!" Quote Link to comment Share on other sites More sharing options...
Sinphaltimus Posted July 17, 2017 Share Posted July 17, 2017 I'm getting this when clicking "Sorry, you don't have permission for that!" Same here.. Sorry, you don't have permission for that! [#10171]You do not have permission to view this attachment. Need Help? Our help documentation Contact the community administrator Quote Link to comment Share on other sites More sharing options...
+arcadeshopper Posted July 19, 2017 Share Posted July 19, 2017 you have to be logged in to dl attachments? I got it fine just now Quote Link to comment Share on other sites More sharing options...
Tursi Posted July 21, 2017 Share Posted July 21, 2017 I was getting that same error yesterday, and I verified I was logged in. It worked just now, so transient error, I guess. Quote Link to comment Share on other sites More sharing options...
kommissar Posted August 20, 2017 Share Posted August 20, 2017 I just noticed playground a couple months ago after downloading a newer copy of classic99. Amazing!! Congratulations to James Abbatiello and Harry Wilhelm. What a difference this would have made 35 years ago. I tinkered with the loader a little bit to make a program that could be typed in by hand, and here is the result - the Mini-Memory Module lines demonstration program for TI Basic on a bare console. If anyone is interested I'll upload the source code later. linesBasic.txt 11 Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted August 20, 2017 Author Share Posted August 20, 2017 (edited) That is amazing! I would never have dreamed that something like this could be typed in from the keyboard. How did you manage to do that? (edit) The thing I don't understand is how you deal with ASCII values that cannot be entered from the keyboard. I have some ideas but they seem kind of cumbersome. Something that can be typed in like this would have been a big hit in Compute! magazine back in the 1980's. And don't forget, it can be saved to cassette! Edited August 20, 2017 by senior_falcon 2 Quote Link to comment Share on other sites More sharing options...
Tursi Posted August 21, 2017 Share Posted August 21, 2017 I just noticed playground a couple months ago after downloading a newer copy of classic99. Amazing!! Congratulations to James Abbatiello and Harry Wilhelm. What a difference this would have made 35 years ago. I tinkered with the loader a little bit to make a program that could be typed in by hand, and here is the result - the Mini-Memory Module lines demonstration program for TI Basic on a bare console. If anyone is interested I'll upload the source code later. Finally got a chance to run this... just so bloody amazing. Well done! 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.