[A83] Re: Selfmodifying code


[Prev][Next][Index][Thread]

[A83] Re: Selfmodifying code




> 
> Hi again! :)
> 
> Lately I have written some self-modifying code, and it got me thinking
> a bit about how ASM-programs actually works on the TI83, and I also
> came to the conclusion that I didn't know squat about it!
> 
> Say I have a 'normal' ASM-program, it seems to be stored in some ASCII
> hex format, it looks like this when I do prg/edit:
> 0A000BC000...etc
> Now, this can't be run in the current state, so I guess that when you
> do a send(9prgName it 'unpacks' it to some other memory area, right?
> But if you have a program that is 20k (in the text format), then you
> would need approximately 10k additional RAM to unpack it to. Is this
> the way it works? Then the 'real' program can't be more than about
> 8k, since this in text-format would occupy approx 16k and then you need
> another 8k free to unpack it too? Am I totally wrong here, enlighten me!

You're right... 


> Then we have 'squished' programs, that seem to be in binary format from
> the beginning. Does the calc run them directly, and in that case, if I
> write self-modifying code, will these mods be permanent, so that the
> next time you start the prg it will be in the state I left it after
> the last run?

Depends on what shell you use... 

ZASMLOAD makes a copy of the program code, so your program can be 12k max. It 
does not not support Program Write Back, so your is back in its original state 
when you execute it again.

When you use a 'better' shell (ASHELL, SOS, ION, etc.) it runs the program in a 
other way, supporting 'write back'... ASHELL and SOS swap the program code with 
the code at 'progstart' when you execute the program, calls 'progstart', and 
swap it back when it is finished (that's why you can't use external files in 
these programs: VAT is temperly screwed). ION uses a complexer way to execute, 
which i havn't figured out yet, to preserve the VAT.
With those shells your program can be +/- 21kb (the shell has to run too), and 
when you modify your code during execution it is indeed written back in that 
state when you finish your program.




References: