Jump to content
IGNORED

Playground


senior_falcon

Recommended Posts

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

  • Like 2
Link to comment
Share on other sites

 

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.

  • Like 1
Link to comment
Share on other sites

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 by moije
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 by moije
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by moije
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • 2 weeks later...

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.

  • Like 1
Link to comment
Share on other sites

  • 11 months later...

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

  • Like 1
Link to comment
Share on other sites

 

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.

Link to comment
Share on other sites

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.

  • Like 1
Link to comment
Share on other sites

  • 7 months later...

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 by moije
  • Like 2
Link to comment
Share on other sites

  • 5 weeks later...

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

  • Like 11
Link to comment
Share on other sites

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 by senior_falcon
  • Like 2
Link to comment
Share on other sites

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!

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